ラップされたオブジェクトを呼び出す
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の質問を参照してください。