みどりねこ日記

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

2012-04-13から1日間の記事一覧

Haskellのdo記法(1)

do記法はモナディックなコードを書くための別の記法です。特にIOモナドのような、仕様として純粋な値を取り出すことが出来ないモナドを使った処理を書くのには便利です。対照的にMaybeやリストのようなモナドからは純粋な値をパターンマッチやそのための関数…

Haskellのモナド(11)

モナドは数学の分野の一つである圏論から来ました。嬉しいことに、Haskellでモナドを理解して利用するために、圏論を理解する必要は全くありません。しかし、圏論でのモナドの定義はHaskellのそれと少し違います。Haskellに持ってきた時に、圏論のそれと同じ…

Haskellのモナド(10)

結合性のおかげで、仮にネストしたとしても>>=演算子が計算の順番のみに対して影響することが保証されます。例えば、下のコードも等価であることが保証されています。 bothGrandfathers p = (father p >>= father) >>= (\gf -> (mother p >>= father) >>= (\…

Haskellのモナド(9)

returnの振る舞いは、右結合、左結合を満たすことという指定があります。また、returnは値をとるだけで、実際にはなんの計算もしない、と決まっています。例として、 maternalGrandfather p = do { m <- mother p; gm <- father m; return gm; } は以下のコ…

Haskellのモナド(8)

命令型言語のようにブロックを組み立てたいとしても、>>=やreturnにむちゃくちゃな機能をつけるわけにはいきません。以下の3つに従う必要があります。 m >>= return = m return x >>= f = f x (m >>= f) >>= g = m >>= (¥x -> f x >>= g) これがモナド則と…