みどりねこ日記

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

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

Haskellのモナド(7)

前回までの説明で、おそらく>>=演算子とreturnが、Maybeを使ったコードを書くときに、煩雑なコードから解放されるために有益であると同意してもらえると思います。これがどうして動くのか、そしてこれが何を意味しているのかを考えましょう。その説明のため…

Haskellのモナド(6)

Functorは関数fmapを適用できる型です。fmapは、リストでいうmapと同じようなものです。圏論によると、すべてのモナドは定義上Functorでもあります。しかし、GHC(事実上のHaskell標準処理系)はそれらを別として捉えており、MonadクラスはFunctorクラスとな…

Haskellのモナド(5)

Haskellでは、型クラスであるモナドはモナドを表すものとして使われています。モナドはControl.MonadモジュールとPreludeの中で定義されています。 class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b -> m b fa…

Haskellのモナド(4)

Maybeモナドにおける>>=演算子の便利さを知るために、以下の2つの関数を提供する家系のデータベースがあるとします。 father :: Person -> Maybe Person mother :: Person -> Maybe Person これらは、誰かの父親・母親の名前を返すか、データベース中に存在…

Haskellのモナド(3)

モナドは以下の3つがあるものとして定義されています。 アクションの型をその結果の型から生成する方法。型コンストラクタMとされる場合が多い。 値を生成するだけのアクションを生成する方法。returnと呼ばれることが多い。 return :: a -> M a 型情報から…

Haskellのモナド(2)

モナドはHaskellにおいて非常に使い勝手のいい概念ですが、Haskell初心者には少々難しい概念でもあります。モナドには多くの機能があり、それ故、様々な人が別々の視点からモナドを説明するのでそれがモナドの汎用性に対する理解の混乱のもととなるのでしょ…

Haskellのモナド(1)

Haskellのモナドについて調べてたら、wikibooksの方に良さ気な解説が載ってましたので翻訳してみました。 「最初に、これをして、次にあれをして、そのあとに他のことをして。」というような論理的な順序が存在するプログラミングをしているときに、モナドは…