可以说延续是monad吗?它们是monad的子集还是仅仅是实现monad的一种方式?
编辑:或者也许我弄错了,monads是一个比延续更抽象的概念?(所以我真的把苹果与橘子比较)
不仅是延续monad,而且它们是一种通用monad,在某种意义上,如果你有continuation和state,你可以模拟任何功能monad.这个令人印象深刻但技术性很强的结果来自Andrzej Filinski令人印象深刻且技术性很强的思想,他在1994年或之后写过:
我们证明,任何单元和扩展操作都可以表达为纯函数术语的monad可以嵌入到具有"可组合延续"的按值调用语言中.
简而言之,由于monad的"绑定"采用有效的延续("计算的其余部分"的lambda)作为参数,monad在这个意义上是连续的.另一方面,继续传递风格可以使用monadic语法糖在非CPS语言中有效实现,如下面的许多misc链接所示.
来自Haskell的'all about monads'教程:
https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monad
一个F#continuation monad,用于为for-style-loops实现'break'和'continue'
http://cs.hubfs.net/forums/thread/9311.aspx
以及在F#中对问题应用continuation monad的示例:
http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!256.entry
他们可以,虽然他们不需要.我会稍微改回你的问题,然后说monad是实现延续的一种方式.但你可以在很多方面实现延续-你可以做CPS的在C#中的温和但受限传真没有太多的精力,例如.看看来自Haskell网站的Continuation Monad,进行非常彻底的处理.