Monad Laws

日本語訳何て言うの。


何やらMonadを扱う関数は下記の3つのルールを守れという事だそうな。

  • return a >>= f が f a と同義。
  • f >>= return が f と同義。
  • f >>= (\x -> g x >>= h) が (f >>= g) >>= h と同義。合成の優先順位が変わっても問題ないように、という意味。

でもこのルールから外れるようなパターンってあるのか?
引数取らないでMonadで返すとかか・・・。


2010/9/14 追記
getLineとかは引数取らないわけだけど、どうなんだろうかね。
あくまでなるべく守ろうとかそんなんなのかな。