1. ホーム
  2. haskell

[解決済み] モナドはエンドファンクタのカテゴリではただのモノイドですが、何か問題でも?

2022-03-19 16:47:10

質問

次の言葉を最初に言ったのは誰でしょう?

モナドは単なるモノイドで エンドファンクターのカテゴリにある。 問題あり?

また、あまり重要ではありませんが、これは本当なのでしょうか?もしそうなら、説明(できればHaskellの経験があまりない人でも理解できるようなもの)をお願いします。

どのように解決するのですか?

このフレーズは、ジェームス・アイリーによるもので、彼の非常におもしろい プログラミング言語の簡単な、不完全な、そしてほとんど間違った歴史 その中で、彼はフィリップ・ワドラーによると架空に主張している。

のSaunders Mac Laneからの引用が元になっています。 現役数学者のためのカテゴリー カテゴリー理論の基礎となるテキストの1つ。 以下はその文脈です。 この言葉の意味を正確に知るには、おそらくここが最適な場所でしょう。

でも、一応言っておきます。元の文章はこうです。

<ブロッククオート

つまり、Xのモナドとは、Xのエンドファンクタのカテゴリにおいて、積×をエンドファンクタの合成に、単位集合を同一エンドファンクタに置き換えただけのモノイドのことです。

X はカテゴリーです。エンドファンクターは、カテゴリーからそれ自身へのファンクターです(これは通常 すべて Functor 関数型プログラマが扱うのは、ほとんど1つのカテゴリ(型のカテゴリ)だけだからです - 余談ですが)。しかし、もう一つのカテゴリを想像することができます。 X となります。これは、オブジェクトがエンドファンクションで、モルヒズムが自然変換であるカテゴリです。

そして、そのエンドファンクターの中には、モナドになるものもあるかもしれません。どのようなものがモナドなのでしょうか?まさに モノイダル 特定の意味での モナドからモノイドへの正確なマッピングを説明する代わりに(Mac Laneが私よりずっとうまくやってくれているので)、それぞれの定義を並べて、比較してもらうことにしましょう。

モノイドとは...

  • 集合です。 S
  • 操作のこと。 - : S × S → S
  • の要素は S , e : 1 → S

...これらの法則を満たすこと。

  • (a - b) - c = a - (b - c) について、すべての a , b c S
  • e - a = a - e = a の場合、すべての a S

モナドとは...

  • エンドファンクションです。 T : X → X (Haskellでは、一種の型構成子 * -> * を持つ Functor インスタンス)
  • 自然な変換です。 μ : T × T → T ここで × はファンクタの合成を意味し ( μ というのは join Haskellでは)
  • 自然な変換です。 η : I → T ここで I の同一性エンドファンクションです。 X ( η というのは return Haskellでは)

...これらの法則を満たしている。

  • μ ∘ Tμ = μ ∘ μT
  • μ ∘ Tη = μ ∘ ηT = 1 (恒等自然変換)

少し目を凝らせば、これらの定義が両方とも、同じ 抽象概念 .