Оптимизация свободной монады

Если у меня есть значение a: Free[Op, A], возможно ли «сгладить» структуру a так, чтобы два Op, связанных вместе свободной монадой, могли быть объединены в один?

Контекст: я хотел бы выполнить это как шаг оптимизации перед интерпретацией, потому что семантика Op заключается в том, что его операции идемпотентны. Таким образом, если два появляются «подряд», второй может быть устранен без ущерба для семантики программы.


person beefyhalo    schedule 30.09.2016    source источник
comment
Может быть, это можно сделать только на уровне интерпретатора? Это похоже на полезное обобщение.   -  person beefyhalo    schedule 05.10.2016
comment
Это ограничение реализации Scalaz/cats, проистекающее из нетерпеливой стратегии оценки Scala, а не фундаментального ограничения Free. Причина в том, что конструктор Gosub/FlatMapped используется Free'ом flatMap для предотвращения переполнения стека: он делает дальнейший процесс самоанализа невозможным, заключая вычисления в функцию батута.   -  person P. Frolov    schedule 21.09.2017


Ответы (1)


Насколько я понимаю, такого рода самоанализ программы Free Monad невозможен, поскольку она представляет собой последовательное вычисление, где каждый шаг зависит от результата другого.

Есть отличный доклад Джона де Гуса о плюсах и минусах Free Monad vs Free Applicative (https://www.youtube.com/watch?v=H28QqxO7Ihc). Последнее дает силу самоанализа.

person Denis Mikhaylov    schedule 06.10.2016