-
21-08-2019 - |
题
可以延续说是单子?是它们的单子的子集或者是他们简单地实现单子的方法吗?
编辑:的或者,也许我听错了和的单子的比的延续一个更抽象的概念的? (所以我真的比较苹果和桔子这里)
解决方案
简言之,由于一个单子的“绑定”需要一个有效延续(即“的计算的其余部分”的一个lambda)作为参数,单子是在这个意义上延续。在另一面,继续传递风格可以有效地在非CPS语言使用一元语法糖实现,由若干低于其它链接的所建议的。
从 '所有关于单子' 在Haskell教程:
https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monad
这是F#延续单子,用来实现“休息”和“继续”为式 - 环
http://cs.hubfs.net/forums/thread/9311.aspx
和例如在F#施加延续单子到一个问题:
http://lorgonblog.spaces.live.com/blog /cns!701679AD17B6D310!256.entry
其他提示
不仅是延续单子,但他们是一种普遍的单子,在这个意义上,如果你有延续和状态,你可以模拟任何功能单子。这令人印象深刻,但技术性很强的结果来自安杰Filinski 令人印象深刻的和技术性很强的头脑,谁在1994年前后写道:
我们表明,任何单子其单元和扩展操作可表达为单纯的功能方面可以被嵌入在呼叫按值语言用“组合的延续”。
他们可以,虽然他们并不需要的人。我想扭转你的问题有点说而不是单子是实现延续的一种方式。但你可以在很多方面实现延续 - 你可以做CPS的在C#中的温和但受限传真没有太多的精力,的 作为示例强> 。看看 的延续单子从哈斯克尔网站对于一个非常彻底的治疗。
这是该主题的一个非常漂亮的文章: http://blog.sigfpe.com/2008/12/母全monads.html
一个延续是在程序中的特定功能。单子类型构造。
一个类型构造Cont<T>
用于取类型T
不会是一个单子延续。
然而,Cont<Cont<T>>
是一个单子,这就是通常所谓的“延续单子”。
(具有callcc的语言是等同于能够从Cont<Cont<T>>
转换为T
。)