モナド則
左同一性 (left identity)
(return x) >>= f == f x
return は >>= に対してほとんど単位元である.
f で移される前に何度上下に写しても結果は変わらない.
Category'
+-----+ +-----+
| m X | | m Y |
+-----+ +-----+
| mx | | my |
+-----+ +-----+
^ : >>= ^
return | : f /
| : +-------+
| : /
| v /
+-----+ +-----+
| X | | Y |
+-----+ +-----+
| x | | y |
+-----+ +-----+
Category
右同一性 (right identity)
my >>= return == my
return は >>= に対してほとんど単位元である.
(移された後に) 何度上下に写しても結果は変わらない.
Category'
+-----+ +-----+
| m X | | m Y |
+-----+ +-----+
| mx | | my |
+-----+ +-----+
^ : ^
f / : | return
+-------+ : |
/ >>= : |
/ v |
+-----+ +-----+
| X | | Y |
+-----+ +-----+
| x | | y |
+-----+ +-----+
Category
結合性 (associativity)
(mx >>= f) >>= g == mx >>= (\x -> f x >>= g)
2 つの関数 f と g を連続して bind するのは、これらの関数から定まる一つの関数を bind することと等しい.
Category'
+-----+ +-----+ +-----+
| m X | | m Y | | m Z |
+-----+ +-----+ +-----+
| mx | | my | | mz |
+-----+ +-----+ +-----+
: >>= ^ : >>= ^ ^
: f / : g / /
: +---------+ : +--------+ / (\x -> f x >>= g)
: / +------------ : - / ----------+
v / / v /
+-----+ +-----+ +-----+
| X | | Y | | Z |
+-----+ +-----+ +-----+
| x | | y | | z |
+-----+ +-----+ +-----+
Category