(позже посетители: два ответа на этот вопрос дают отличное представление, если вы заинтересованы, вы, вероятно, должны прочитать их оба, я мог бы только исключить одно из ограничений SO)
Из всех обсуждений, которые я нашел онлайн в продолжении монады, они либо упоминают, как это можно использовать с некоторыми тривиальными примерами, либо объясняют, что это фундаментальный строительный блок, как в этой статье в Мать всех монад является продолжением монады.
Интересно, есть ли применимость за пределами этого диапазона. Я имею в виду, имеет ли смысл обертывать рекурсивную функцию или взаимную рекурсию в монаде продолжения? Помогает ли она в удобочитаемости?
Здесь версия F # продолжения, взятая из этого сообщения SO:
type ContinuationMonad() =
member this.Bind (m, f) = fun c -> m (fun a -> f a c)
member this.Return x = fun k -> k x
let cont = ContinuationMonad()
Это просто академический интерес, например, чтобы помочь понять монады или сборщики вычислений? Или существует какая-то реальная применимость, добавленная безопасность типа или она обходит типичные проблемы программирования, которые трудно решить иначе?
То есть, продолжение монады с вызовом /cc от Райана Райли показывает, что сложно обрабатывать исключения, но это не объясняет какую проблему он пытается решить, и примеры не показывают, зачем ему нужна именно эта монада. По общему признанию, я просто не понимаю, что он делает, но это может быть сокровищница!
(Примечание: Мне не интересно понимать, как работает монада продолжения, я думаю, что у меня есть справедливое представление об этом, я просто не понимаю, какую проблему программирования он решает.)