継続はモナドですか?
-
21-08-2019 - |
質問
継続はモナドと言えるでしょうか?それらはモナドのサブセットですか、それともモナドを実装する単なる方法ですか?
編集: あるいは、私が勘違いしたのかもしれませんし、 モナド よりも抽象的な概念です 続き?(つまり、ここでは実際にリンゴとオレンジを比較しています)
解決
簡潔には、モナドはその意味で継続されています。以下にその他のリンクの数によって示唆されるように、フリップ側では、継続渡しスタイルを効果的に、単項構文糖を使用して、非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またはその付近に書いた人:
我々は、そのユニットと拡張操作は純粋に機能的な用語として表現可能である任意のモナドは「構成可能継続」とコールバイ値言語に埋め込むことができることを示します。
そのトピックには非常に素晴らしい記事: http://blog.sigfpe.com/2008/12/マザー・オブ・オールmonads.htmlする
継続はプログラム内の特定の関数です。モナドは型コンストラクタです。
モナドではないでしょう型Cont<T>
を服用継続のための型コンストラクタのT
ます。
しかし、Cont<Cont<T>>
はモナドであり、これは一般に「継続モナド」と呼ばれるものです。
(言語の持つcallccがCont<Cont<T>>
からT
へ変換することができることと等価である。)