continuations可以说是monads吗?它们是monads的一个子集,还是仅仅是实现monads的一种方式?
编辑:也许我搞错了,monads是一个比continuations更抽象的概念?(所以我在这里实际上是在比较苹果和橙子)
发布于 2009-03-20 05:29:20
简而言之,由于monad的“绑定”需要一个有效的延续(“计算的其余部分”的lambda )作为参数,因此monad在这个意义上就是延续。另一方面,可以使用一元语法糖在非CPS语言中有效地实现延续传递样式,如下面的一些misc链接所示。
来自Haskell的“all about monads”教程:
https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monad
一个F#延续单体,用于为for样式循环实现'break‘和'continue’
http://cs.hubfs.net/forums/thread/9311.aspx
以及在F#中对问题应用连续单数的示例:
http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!256.entry
发布于 2010-08-05 08:17:56
延续是程序中的一个特定函数。单体是类型构造函数。
接受类型T
的延续的类型构造函数Cont<T>
将不是monad。
然而,Cont<Cont<T>>
是一个monad,这就是通常所说的“延续monad”。
(在一种语言中使用callcc等同于能够从Cont<Cont<T>>
转换为T
。)
https://stackoverflow.com/questions/666121
复制