А можно кратенький примерчик, чтобы понять? Если не сложно)
Ох, кратенький тут сложно сделать. Попробовал пару набросков сделать, но всё равно слишком много приходится писать.
Говорю в достаточно наивных терминах, чтобы не пугать, но общая идея в том, что если абстрагроваться от рекурсии в определении рекурсивного типа, то можно будет различные интересные рекурсивные обходы этого типа определять через функции без явного использования рекурсии в них.
Можно почитать в подробностях как и почему такое сделать вот тут:
https://www.schoolofhaskell.com/user/bartosz/understanding-algebras
Там же в конце ссылки на известные статьи по теме
Часто упоминаемые библиотеки, которые это реализуют:
1. Хаскель: http://hackage.haskell.org/package/recursion-schemes
2. Скала + cats: https://github.com/higherkindness/droste
3. Скала + scalaz: https://github.com/slamdata/matryoshka