(后来的访问者:这个问题的两个答案都给出了很好的见解,如果你有兴趣,你可能应该同时阅读它们,我只能将一个作为 SO 的限制除外)
从我在网上找到的关于 continuation monad 的所有讨论中,他们要么提到了如何将它与一些琐碎的例子一起使用,要么他们解释说它是一个基本的构建块,就像这篇关于所有 monad 之母的文章中的 continuation monad一样。
我想知道是否有超出这个范围的适用性。我的意思是,在延续单子中包装递归函数或相互递归是否有意义?它有助于可读性吗?
这是取自此 SO 帖子的延续模式的 F# 版本:
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()
它仅仅是学术兴趣,例如帮助理解单子或计算构建器?还是有一些现实世界的适用性,增加了类型安全性,或者它是否规避了其他难以解决的典型编程问题?
即,来自 Ryan Riley 的带有 call/cc 的 continuation monad表明处理异常很复杂,但它没有解释它试图解决什么问题,并且示例也没有说明为什么它特别需要这个 monad。诚然,我只是不明白它的作用,但它可能是一个宝库!
(注意:我对了解 continuation monad 的工作原理不感兴趣,我想我对它有相当的了解,只是看不出它解决了什么编程问题。)