みどりねこ日記

よくわからないけど、頑張りますよ。

Haskellのモナド3(3)

MonadPlusのインスタンスは、モナドインスタンスモナド則を満たす必要があるのと同様に、いくつかの法則を満たさなくてはなりません。残念ながら、これらの法則はまだ確定していません。ただ、確実に必要なのが、mzeroとmplusがモノイドを形成することで、すなわち、

mzero `mplus` m = m
m `mplus` mzero = m
m `mplus` (n `mplus` o) = (m `mplus` n) `mplus` o

Control.Monadでは、次の法則が追加されています。

mzero >>= f = mzero
m >> mzero = mzero

Haskell Wikiでは他に以下が追加されています。

(m `mplus` n) >>= k = (m >>= k) `mplus` (n >>= k)

実際にはこの他にもいろいろな法則があるため、IOがMonadPlusとして扱われているようなモナドを見るかもしれません。All About MonadsやHaskell WikiのMonadPlusあたりを見ればそのへんの情報が載っています。