| ホーム > Haskell > 2004年12月23日 > The Monad Class | 記事の検索 | サイト検索 | 更新情報 |
| プロフィール | 記事一覧 | リンク集 | RSS |
|
monadはHaskellの中で難しいところらしい。 難しいという意味ではC言語のポインタのようなものか。
とりあえず、Haskell Reportの6.3.6 The Monad Classをじっと見る。
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
fail :: String -> m a
m >> k = m >>= \_ -> k
fail s = error s
>>= は、実行結果を次に渡していくものっぽい。
>> は、実行結果を捨てて、次に進むものっぽい。
return は、実行結果を返す。
fail は、エラー。
listとMaybeとIOはMonadクラスのインスタンスらしい。 failは、listでは[], MaybeではNothing、IOでは例外、といわれればなるほどと思うが、まだよくわからない。
Monadのインスタンスは次の規則を満たすそうだ。→満たすように作るべきだそうだ。
return a >>= k = k a m >>= return = m m >>= (\x -> k x >>= h) = (m >>= k) >>= h
>>= が結果を次に渡していくと考えると、
おかしくはないが、なるほど!とはまだ思えない。
[monad][report] 2004年12月23日 18:51
2006 [ 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ]
2005 [ 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ]
2004 [ 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ]
book(3) / char(2) / compiler(3) / craft(5) / data(7) / enum(1) / geb(2) / hawiki(1) / hugs(1) / info(1) / io(3) / list(2) / map(3) / monad(16) / nobsun(12) / report(4) / sicp(2) / soe(8) / suchthat(2) / yaht(8)