ラップされたオブジェクトを呼び出す
chainと、今後のすべてのメソッド呼び出しでラップされたオブジェクトも返されます。計算が終了したら、を使用valueして最終値を取得します。
では、chain関数はモナドを作成しますか?
ラップされたオブジェクトを呼び出す
chainと、今後のすべてのメソッド呼び出しでラップされたオブジェクトも返されます。計算が終了したら、を使用valueして最終値を取得します。
では、chain関数はモナドを作成しますか?
いいえ、モナドではなく、コモナドです!ラップされたオブジェクトを受け取り、通常の値を返す関数を、ラップされたオブジェクトを受け取り、返す関数に変換します。Haskell型の署名として、次のようになります。
(Wrapped a -> b) -> (Wrapped a -> Wrapped b)
の型署名valueは次のとおりです。
Wrapped a -> a
これらはまさにあなたがcomonadに必要なものです。通常、最初の関数が呼び出されextend、2番目の関数が呼び出されextractます。
comonadは、いくつかの追加のコンテキストを持つ値と考えることができます。そしてもちろん、それはまさにその通りですchain。
comonadsの詳細については、このStackoverflowの質問を参照してください。