モナドメモ - 圏論におけるモナドの定義

関数型言語Haskellで使用されているモナドの圏論における定義のメモ

準備

まず,圏の定義.

圏(Category)

圏Cは以下のものにより構成される.

次に関手の定義

関手(Functor)

CとDとを関手とする.Cの対象AにDの対象F Aを割当て,Cの射 f : A → BにDの射 F f: F A → F Bを割当てる写像Fで以下の条件をみたすものを関手という.

そして自然変換の定義する.

自然変換(Natural Transformation)

関手F,G: C → Dを考える.Cの各対象Aに対し,Dの射μA: F A → G Aを割当て,Cの任意の射f: A → Bに対してG f. μA = μB . F fが成り立つような割当てをFからGへの自然変換という.

モナド

そして,モナド.

モナド

圏C上のモナドとは,次の性質を満たす3つ組(T, η, μ )である.

ここで,T Cの対象から,Cの対象でありT Cの対象でないようなものへの自明な射は存在しないことに注意.

Haskellにて使用される,モナドと等価なKleisli Triple.

Kleisli Triple

圏C上のKeisli Tripleとは,次の性質を満たす3つ組(T, η, _*)である.

最後のルールがbindの結合則,その上の2つがunitidのように振舞うことをあらわしている.実際に次のようなKleisli圏を定義できる

Kleisli圏

圏C上のKleisli Triple(T, η, _*)に対して,以下のように構成することで圏Dをつくることができる.

何のことはない.モナドとは関数合成に別の意味を与える世界だったのだ.