モナド個人用まとめ(ゲームっぽく)
モナドの定義とか - 檜山正幸のキマイラ飼育記 (はてなBlog)で紹介されている代数スタイルと拡張スタイルの上っ面だけのまとめ。図もコピペしました。
図では、対象(型)X に対して真上に 関手 T で移した TX を書く。上げるとか下げるとか持ち上げるとかは、その図の意味で。矢印は射(関数)。
代数スタイル(通常のモナドスタイル)
- 無条件でできること
- 矢印の頭を1つ上に上げる
- 矢印の全体を1つ上に上げる
- 条件付でできること
- 矢印の頭が T2(なんとか) の形のとき、その頭を1つ下げることができる。
拡張スタイル(Kleisli Triple とか Haskell)
- 無条件でできること
- 矢印の頭を1つ上に上げる
- 条件つきでできること
- 矢印の頭が T(なんとか) の形のとき、その矢印のおしりを1つ上げることができる。
図で。
- 頭上げ(代数スタイル、拡張スタイル)。ηとか return。
T(Y) T(Y) / ⇒ f'/ f / X ----→Y X Y
- 全体上げ(代数スタイル)。つまり関手。
f* T(X)----→T(Y) ∧ ‖ f X ----→Y
- 頭下げ(代数スタイル)。μ。
T2(Y) T2(Y) / f / ⇒ / f' X T(Y) X ----→T(Y)
- おしり上げ(拡張スタイル)。拡張。
M(Y) M(X)----→M(Y) / f'/ : ⇒ / : X . . . Y X . . . Y
2つのスタイルは同値だけど、この矢印ルールレベルでなら確かめるのは簡単。