これは私の質問に完全には答えませんが、いくつかの関連情報を回答形式で入れたかったのです。
「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