HaskellのComonadタイプクラスとは何ですか?ComonadのようにcomonadパッケージでControl.Comonad(Comonadの型クラスを提供し、他のパッケージの説明にも歓迎されています)。私は漠然とコモナドについて聞いたことがありますが、私がそれについて本当に知っているのは、それがextract :: w a -> a
モナドの一種の類似物を提供することだけですreturn :: a -> m a
。
「実際の」コードでのComonadの「実際の」使用に注意することのボーナスポイント。
「co」と「normal」の違いは何ですか?モナドとは何か知っています。したがって、「co」の意味を知っていれば、自分自身を結論付け、コモナードとは何かを理解し、深く理解することができます。アレクセイロマノフの答えはその点で何もしませんでした。
—
Evi1M4chine 2016年
@ Evi1M4chine:「co」(大まかに)は「矢印を反転」を意味します。これは大まかなビジュアルです。モナド演算を考えてみましょう:
—
Dan Burton
return :: a ~> m a
、flip bind :: (a ~> m b) -> (m a ~> m b)
。波線の矢印を逆にすると、コモナディック操作が得られます:extract :: a <~ w a
、extend :: (a <~ w b) -> (w a <~ w b)
(extract :: w a -> a
、extend :: (w a -> b) -> w a -> w b
)
@Dan Burtonに感謝します...モナドを使用している間は、「内側」で作業し(新しい変更されたものを埋め込む)、コモナードで「外側」で作業します(最終的に、または単に変更するため) 。その見方は正しいですか?それは確かに深い理解に非常に役立ちます。
—
Evi1M4chine 2016年
コモナードを使用して、共効果をモデル化できます。ここに、コエフェクトの素晴らしい紹介があります:tomasp.net/coeffects
—
zeronone