После некоторого изучения ([1], [2], [3], среди прочих), я пытаюсь сделать работу монады продолжения, пытаясь привести некоторые примеры самостоятельно.Попытка осуществить с Cont монады. Синтаксическая проблема
Второй ответ [1] предлагает выразить факториал с использованием продолжений. Мое решение таково:
Cont ($ (fact 0)) = return 1
Cont ($ (fact n)) = Cont ($ (fact (n-1))) >>= (\x -> Cont ($ (n*x)))
Я сделал некоторые симуляции на бумаге, и решение должно быть правильным.
Однако Я не могу усвоить его GHC. Конечно, я переименовал функцию fact
, но до сих пор не радуюсь.
Моя последняя попытка https://gist.github.com/Muzietto/595bef1815ddf375129d и дает как всегда parse error in pattern \c -> .....
Можно ли предложить бегущую реализацию этих определений?
[1] How and why does the Haskell Cont monad work?
[2] http://hackage.haskell.org/package/mtl-1.1.0.2/docs/Control-Monad-Cont.html
[3] https://wiki.haskell.org/MonadCont_under_the_hood
первым: сущность прекрасно само по себе, но почему вы не скопировать и вставить код здесь - это просто удобно для нас пытается помочь здесь - Затем я не думаю, что ваши типы совпадают (или, я думаю, неправильно, что вы пытаетесь сделать) - попытались ли вы решить эту проблему только с продолжением-прохождением стиля (вам не нужна монада/'Cont' -wrapper, чтобы понять технику)? – Carsten
@ carsten - Эта попытка моей действительно возникает из отлично работающей реализации CPS, определенно слишком тривиальной, чтобы упомянуть. Я считаю, что ясно, что весь смысл этого вопроса заключается в использовании монады, и особенно в ее функции связывания. –