Haskellなどの関数型プログラミングを学習していて、モナドのことが少しわかってきたかな、、と思っていたら次は「モナド変換子」という壁にぶち当たります。 オブジェクト指向に慣れ親しんだ我々平凡なプログラマに立ちはだかる第二の壁です。 Haskellでプログラムを書く場合、こいつを使わないとまともなプログラムを書くのが難しい。とってもじゃじゃ馬なやつですが、使えるととても便利なやつでもあります。 今回は「モナド変換子」の一側面を眺めて、モナド変換子の有難みを実感してみます。 モナド変換子導入のモチベーション あまり厳密な言い方ではないかもしれませんが、実用上は「複数のモナドの効果をもつ計算を同時に行いたいから」と言って良いかと思います。 Monad型クラスの(>>=)の型注釈は以下のように定義されていました。 上記の型変数mはモナドですが、このmは全て同じモナドでなければなりません。 上記
Azad Bolour believes that monad transformers are usually explained with insufficient motivation. He presents them in relation to ordinary function composition, using a novel perspective gained from participating in a monad transformer study group. His talk has three parts: Motivation - why use transformers, how to derive them from first principles Implementation - getting into the specifics of May
What exactly is the difference between (e.g.) StateT and MonadState? Which one should I code in? MonadState is defined by class Monad m => MonadState s m | m -> s where. Why is the type of state uniquely determined by the underlying monad? Can instance resolution done at compile time for MonadState? If not, doesn't use of MonadState imply use of dynamic dispatch?
Haskellではモナドと呼ばれる部品を組み合わせてプログラムを作ります。別種のモナドを組み合わせるためのモナド変換子の使い方の初歩を説明します。ライブラリで用意されたモナド変換子を手っ取り早く使うことを目的としているため、モナド変換子の作り方や圏論には言及しません。 シリーズの記事です。 Haskell 超入門 Haskell 代数的データ型 超入門 Haskell アクション 超入門 Haskell ラムダ 超入門 Haskell アクションとラムダ 超入門 Haskell IOモナド 超入門 Haskell リストモナド 超入門 Haskell Maybeモナド 超入門 Haskell 状態系モナド 超入門 Haskell モナド変換子 超入門 ← この記事 Haskell 例外処理 超入門 Haskell 構文解析 超入門 【予定】Haskell 継続モナド 超入門 【予定】Has
The Haskell programming language community. Daily news and info about all things Haskell related: practical stuff, theory, types, libraries, jobs, patches, releases, events and conferences and more...
When writing the code in my previous post, I wanted to have a monad which combined the ability to generate random numbers with the ability to fail. Naturally, I decided to use RandT Maybe. But when I tried to write a failing computation of this type, I got a type error: No instance for (MonadPlus (RandT StdGen Maybe)) arising from a use of `mzero' It seems that no one ever bothered to add a MonadP
アドベントカレンダーのいいネタが無いなあと思っていたところ、ちょうど週末にあたらしいmonad-controlがリリースされたので、これを紹介したいなと思いました。 その前に、モナドトランスフォーマーというかっこいい名前の代物の話をちょっとだけしましょう。 モナドトランスフォーマーと例外処理 Haskellerの皆さんはきっと息をするかのように自然にモナドを使っていることと思います。標準で提供されているモナドは単機能なので、組み合わせたくなってきます。必然的に皆モナドトランスフォーマーに手を伸ばすわけです。実際のアプリケーションのコードを書くと、多くのモナドではベースモナドがIOになるでしょうから、今度は自作したカスタムモナドスタックでIOが投げる例外をハンドルしたくなるわけです。 ここでふとControl.Exception.catchの型をみると Prelude> :t Control
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く