モナド則ってなんでこんなに遠回しな言い方するの?
[1] (return x) >>= f == f x
[2] m >>= return == m
[3] (m >>= f) >>= g == m >>= (\x -> f x >>= g)