Monad Laws
とりあえずメモだけ…。
map :: (a -> b) -> (M a -> M b) map fm = m * λa.unit (f a) join :: M (M a) -> M a join z = z * λm.m
map id = id map (f . g) = map f . map g map f . unit = unit . f map f . join = join . map (map f) join . unit = id join . map unit = id join . map join = join . join m * k = join (map k m)
unit, join, map でモナドは定義できる。いつもの3つのモナド則は、これら7つの法則(m * k = join (map k m) 以外)で置き換えられる。