The Monad Class

2004年12月23日 結城浩

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 ]

Bloglines

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)

記事検索 サイト検索はこちら

豊かな人生のための四つの法則