![]() ![]() ![]() ![]() |
![]() |
|
![]() |
||
![]() |
代表的なモナド
+ Maybe
+ List
class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a
>>=はbindと読む。
#(>>=)は a -> (a -> b) -> bをモナド適用後も保証しているイメージか
モナドとなるためには、>>=,returnがモナド則を満たす必要がある。
1. (return x) >>= f == f x 2. m >>= return == m 3. (m >>= f) >>= g == m >>= (\x -> f x >>= g)
最初の規則は return が >>= に関して左単位元になっていることを要請しています。二番目の規則は return が >>= に関して右単位元になっていることを要請しています。そして、三番目の規則は >>= に関する一種の結合法則です。三番目の規則に従えば、モナドをつかった do 記法のセマンティクスは一貫性をもちます。
http://haskell.cs.yale.edu/haskellwiki/Books#Using_monads:モナドに関する文献index]
3.Monad Lawsにて、Monad則を用いて、Addが結合性を満たすことを証明している。
Monadの典型は、例外、入出力、状態の3つ?