Я пытался Монаду Конта и обнаружил следующую проблему.
- Сначала создайте бесконечный список и поднимите все элементы в монаду Cont.
- Используйте операцию последовательности, чтобы получить монаду Cont в бесконечном списке.
- Когда мы пытаемся запустить монаду, например, с головой, она попадает в бесконечный цикл пытаясь расширить продолжение, и голова никогда не называется.
Код выглядит следующим образом:
let inff = map (return :: a -> Cont r a) [0..]
let seqf = sequence inff
runCont seqf head
Итак, это ограничение реализации монады Cont в Haskell? Если да, то как это улучшить?