to2yの日記

 | 

2006-09-03ふつける勉強会 第十回目 第11章 「モナド」

11.1 モナドとは何か

もともと数学圏論の分野で使用される概念

代表的なモナド

+ IOモナドアクション

+ Maybe

+ List

Haskellでは、Monadという型クラスインスタンス

Monadクラス

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)

モナドに関する参考文献

All About Monads

最初の規則は return が >>= に関して左単位元になっていることを要請しています。二番目の規則は return が >>= に関して右単位元になっていることを要請しています。そして、三番目の規則は >>= に関する一種の結合法則です。三番目の規則に従えば、モナドをつかった do 記法のセマンティクスは一貫性をもちます。

http://haskell.cs.yale.edu/haskellwiki/Books#Using_monads:モナドに関する文献index]

no title (PDF)

3.Monad Lawsにて、Monad則を用いて、Add結合性を満たすことを証明している。

雑感

Monadの典型は、例外、入出力、状態の3つ?

 |