![このホワイトボードは「モナドとは自己関手の圏におけるモノイド対象である」という命題を、具体から抽象へ積み上げて図式で示したものです。 最上段:Swift圏 圏の定義そのものを Swift の型で具体化。対象は型(Int, String, Bool、関数型 Int→Bool なども対象)、射は関数。三角形 String/Int/Bool で射の合成 g∘f と恒等射 id を示し、Never が始対象・Void が終対象であることも添えてある。Optional/Array は自己関手として描かれ、関手則 map(id)=id、map(g)∘map(f)=map(g∘f) を明示。Array.first/last は Array → Optional の自然変換。 中上段:自己関手圏 [Swift, Swift] 対象が自己関手(Optional, Array, Id)、射が自然変換となる圏。関手合成⚪︎を積、Id を単位対象とするモノイダル圏。 - η:some : Id→Optional、Array.init : Id→Array - μ:flatMap{$0}(= join):M∘M→M 中下段左:モナド則 η・μ が満たす2法則の可換図式。結合律(M∘M∘M の四角形)と単位律(Id→M∘M←Id の三角形、両斜辺 id)。 中下段右:モノイド対象 (M, μ, η) の一般定義 モナド則の ∘ を一般の積 × に置き換えた図。⊗↦∘, I↦Id の対応でモナドになることを、左のモナド則と並置して示す。ここが全体の主題のかなめ。 最下段左右:モノイド対象の具体例 モノイド対象 (Bool, ∧, true)とモノイド対象 (Int, +, 0) 全体の論理構造 集合のモノイド(Bool,∧,true), 一般のモノイド対象(M, μ, η) , 自己関手圏のモノイド対象(M, μ, η) , モナド (Optional, Array) すべて同一の可換図式(結合律・単位律)で表現される 具体(Bool/Int)→ 一般(モノイド対象)→ 応用(自己関手=モナド)という抽象化の3段階が、すべて同じ結合律・単位律の図式で貫かれている点が要。](https://pbs.twimg.com/media/HJmPSEsboAASWOk.jpg?name=small&format=webp)
ALT このホワイトボードは「モナドとは自己関手の圏におけるモノイド対象である」という命題を、具体から抽象へ積み上げて図式で示したものです。 最上段:Swift圏 圏の定義そのものを Swift の型で具体化。対象は型(Int, String, Bool、関数型 Int→Bool なども対象)、射は関数。三角形 String/Int/Bool で射の合成 g∘f と恒等射 id を示し、Never が始対象・Void が終対象であることも添えてある。Optional/Array は自己関手として描かれ、関手則 map(id)=id、map(g)∘map(f)=map(g∘f) を明示。Array.first/last は Array → Optional の自然変換。 中上段:自己関手圏 [Swift, Swift] 対象が自己関手(Optional, Array, Id)、射が自然変換となる圏。関手合成⚪︎を積、Id を単位対象とするモノイダル圏。 - η:some : Id→Optional、Array.init : Id→Array - μ:flatMap{$0}(= join):M∘M→M 中下段左:モナド則 η・μ が満たす2法則の可換図式。結合律(M∘M∘M の四角形)と単位律(Id→M∘M←Id の三角形、両斜辺 id)。 中下段右:モノイド対象 (M, μ, η) の一般定義 モナド則の ∘ を一般の積 × に置き換えた図。⊗↦∘, I↦Id の対応でモナドになることを、左のモナド則と並置して示す。ここが全体の主題のかなめ。 最下段左右:モノイド対象の具体例 モノイド対象 (Bool, ∧, true)とモノイド対象 (Int, +, 0) 全体の論理構造 集合のモノイド(Bool,∧,true), 一般のモノイド対象(M, μ, η) , 自己関手圏のモノイド対象(M, μ, η) , モナド (Optional, Array) すべて同一の可換図式(結合律・単位律)で表現される 具体(Bool/Int)→ 一般(モノイド対象)→ 応用(自己関手=モナド)という抽象化の3段階が、すべて同じ結合律・単位律の図式で貫かれている点が要。

























