109

HaskellのComonad型クラスとは何ですか?comonadパッケージのControl.ComonadのComonadと同様です(Comonad型クラスを提供する他のパッケージの説明も歓迎します)。私は漠然とコモナドについて聞いたことがありますがextract :: w a -> a、それについて私が本当に知っているのは、モナドと似たようなものを提供することだけですreturn :: a -> m a

「実際の」コードでのComonadの「実際の」使用に注目するためのボーナスポイント。

4

2 に答える 2

84

これらのリンクが役立つ場合があります。

  1. セルオートマトンの評価は一般的です。特に、「多くの小さいが類似した計算から大きなデータ構造がつなぎ合わされているのを見るときはいつでも、私たちがコモナドを扱っている可能性が高い」。
  2. シーケンス、ストリーム、およびセグメント
  3. 日常生活におけるコモナド
于 2011-12-08T09:40:29.807 に答える
24

これは私の質問に完全には答えませんが、いくつかの関連情報を回答形式で入れたかったのです。

「co」(大まかに)は「矢印を反転」を意味します。これがその大まかなビジュアルです。

モナディック操作を考えてみましょう。

return :: a ~> m a
flip (>>=) :: (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

この形式でreturnは、がの引数スロットにちょうど収まる矢印であることに注意してください。同じことがとflip (>>=)にも当てはまります。モナド/コモナドの法則によれば、そのスロットに入れるか入れると、結果はアイデンティティの矢印になります。法則は同じで、「矢印を反転させるだけ」です。それは非常に手ごわい答えですが、うまくいけば、それはいくつかの洞察を提供します。extractextendreturnextract

于 2016-03-03T19:52:01.307 に答える