みどりねこ日記

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

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

Haskellモナドトランスフォーマー(3)

さて、準備が整ったので、getPasswordやそれを利用するコードを書きなおしてみましょう。 getValidPassword :: MaybeT IO String getValidPassword = do s <- lift getLine guard (isValid s) return s askPassword :: MaybeT IO () askPassword = do lift $…

Haskellモナドトランスフォーマー(2)

関数getPasswordとそれを利用するコードを簡潔に書くために、IOモナドにMaybeモナドの特性を与えるモナドトランスフォーマーを定義します。これを、モナドトランスフォーマーの慣例的な名付け方に従い、最初に与える特性を持つモナドの名前+Tとし、MaybeTと…

Haskellモナドトランスフォーマー(1)

ここまでで、モナドがどういうもので、IOモナドは不純な計算のため、Maybeは失敗するかもしれない計算のために、…というように、どのように使われるのかが理解できたのではないかと思います。実際の作業の中で、複数のモナドの特性を扱いたい場合があります…

Haskellのモナド3(5)

モノイドについて知らないなら、この記事がわからなくても問題無いです。モノイドは、幾つかの公理を満たす、単位元(ゼロ)と2項演算(プラス)の2つのメソッドがあるクラスです。 class Monoid m where mempty :: m mappend :: m -> m -> m 例えば、リス…

Haskellのモナド3(4)

mplusとmzeroの他にも、いくつか知っておくべき関数があります。msum MonadPlusのインスタンスを扱っている時に、モナドのリスト[Maybe a]、つまり[[a]]を受け取ってそれをmplusで折りたたんでいくという作業をよく行います。msumがまさにそれです。 msum ::…