HaskellのComonadタイプクラスとは何ですか?


105

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

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


「co」と「normal」の違いは何ですか?モナドとは何か知っています。したがって、「co」の意味を知っていれば、自分自身を結論付け、コモナードとは何かを理解し、深く理解することができます。アレクセイロマノフの答えはその点で何もしませんでした。
Evi1M4chine 2016年

2
@ Evi1M4chine:「co」(大まかに)は「矢印を反転」を意味します。これは大まかなビジュアルです。モナド演算を考えてみましょう:return :: a ~> m aflip bind :: (a ~> m b) -> (m a ~> m b)。波線の矢印を逆にすると、コモナディック操作が得られます:extract :: a <~ w aextend :: (a <~ w b) -> (w a <~ w b)extract :: w a -> aextend :: (w a -> b) -> w a -> w b
Dan Burton

@Dan Burtonに感謝します...モナドを使用している間は、「内側」で作業し(新しい変更されたものを埋め込む)、コモナードで「外側」で作業します(最終的に、または単に変更するため) 。その見方は正しいですか?それは確かに深い理解に非常に役立ちます。
Evi1M4chine 2016年

コモナードを使用して、共効果をモデル化できます。ここに、コエフェクトの素晴らしい紹介があります:tomasp.net/coeffects
zeronone

回答:


83

これらのリンクは役立つかもしれません:

  1. セルオートマトンの評価は、コモナディックです。特に、「多数の小さいが類似した計算から大きなデータ構造がつながっているのを見るときはいつでも、私たちがコモナドを扱っている可能性が高いです」。
  2. シーケンス、ストリーム、セグメント
  3. 日常生活におけるコモナード

1
+1最初のリンクは、私にとってそれを本当にまとめたリンクでした。
11

42
リンクのみの回答には、少なくともリンクされたコンテンツの概要が含まれている必要があります。現在、この回答は良いSO回答になるには適していません。リンクされた記事がなくても自立できるように、少し拡張することを検討してください。
バクリウ2014

3
「多数の小さいが似た計算から大きなデータ構造がつなぎ合わされているのを見るときはいつでも、私たちがコモナドを扱っている可能性が高いです」 ....それは、フラグメントシェーダーがコモナディックであることを意味しますか?
Sam Kellett 2015年

私が見つかりました。この例のをextend参考にすること。
Chris Penner 2017年

22

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

"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 (>>=)、そして同じことが真のであるextractextend。モナド/共和制の法則によれば、そのスロットに、returnまたはextractそのスロットに入れると、結果は正体の矢になります。法則は同じであり、「矢をひっくり返すだけで」です。それは非常に手探りの答えですが、うまくいけば、それはいくつかの洞察を提供します。


2
あなたの答えは、モナドのチュートリアルの誤解を避けることでうまくいきます。モナド(およびコモナド)は単なるインターフェースです。彼らがどのように意図されていたかを知ることは確かに素晴らしいことですが。のように:それらの背後にあるアイデア。
Evi1M4chine 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.