Haskellのモナド(8)
命令型言語のようにブロックを組み立てたいとしても、>>=やreturnにむちゃくちゃな機能をつけるわけにはいきません。以下の3つに従う必要があります。
m >>= return = m return x >>= f = f x (m >>= f) >>= g = m >>= (¥x -> f x >>= g)
これがモナド則と呼ばれるものです。
最初のものは右結合、次が左結合、そして最後のが結合規則を表しています。Haskellでは、すべてのモナド型クラスのインスタンスはこれに従うことが期待されています。