История изменений
Исправление qnikst, (текущая версия) :
один из вариантов deforestation основанный на правиле stream/unstream. Грубо говоря - удаление промежуточных структур.
[1] https://dl.acm.org/citation.cfm?id=165214 статья от SPJ про другой вариант, основанный на foldr/build.
[2] https://dl.acm.org/citation.cfm?id=165214 статья от DonS'а, немного устарело, но принципы сохранились, используется в Text и Vector.
Впрочем подобные фишки и у Бёрда рассматривались. Собранная инфа есть в тезисе Duncan Coutts, но я так и не осилил найти, чтобы прочитать. Оба метода не покрывают всевозможные оптимизации, так что использовать логично и то и другое.
P.S. поправил ошибку.
Исходная версия qnikst, :
один из вариантов deforestation основанный на правиле foldr/unfoldr. Грубо говоря - удаление промежуточных структур.
[1] https://dl.acm.org/citation.cfm?id=165214 статья от SPJ про другой вариант, основанный на foldr/build.
[2] https://dl.acm.org/citation.cfm?id=165214 статья от DonS'а, немного устарело, но принципы сохранились, используется в Text и Vector.
Впрочем подобные фишки и у Бёрда рассматривались. Собранная инфа есть в тезисе Duncan Coutts, но я так и не осилил найти, чтобы прочитать. Оба метода не покрывают всевозможные оптимизации, так что использовать логично и то и другое.