[解決済み] モナドはエンドファンクタのカテゴリではただのモノイドですが、何か問題でも?
質問
次の言葉を最初に言ったのは誰でしょう?
モナドは単なるモノイドで エンドファンクターのカテゴリにある。 問題あり?
また、あまり重要ではありませんが、これは本当なのでしょうか?もしそうなら、説明(できれば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 (恒等自然変換)
少し目を凝らせば、これらの定義が両方とも、同じ 抽象概念 .
関連
-
[解決済み】なぜパースエラーになるのか?インデント?
-
[解決済み】Haskellでの挿入ソート
-
[解決済み] 解釈の仕方 (Eq a)
-
[解決済み] Project Eulerとの速度比較。CとPythonとErlangとHaskellの比較
-
[解決済み] 制約条件付き特殊化
-
[解決済み] GHCはなぜこんなに大きいのか/大きいのか?
-
[解決済み] Haskellのマルチコアプログラミングはどうなっているのか?
-
[解決済み] CabalとStackの違いは何ですか?
-
[解決済み] ハスケル Where vs. Let
-
[解決済み] GHCでコンパイルした小さなHaskellプログラムを巨大なバイナリにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン