このチュートリアルは、モナドの概念とその関数プログラミングにおける応用に
ついて、初中級の Haskell プログラマにわかりやすく、利用価値があるような
解説をすることを旨としています。読者は Haskell になれていることを前提と
しますが、モナドに関する経験は要求していません。このチュートリアルは、多
くの題材をカバーしています。後半のセクションでは、前半の題材をよく理解し
ていることを前提とします。順をおって、モナドプログラミングを例示するため
のサンプルコードがたくさん用意されています。一読で、すべての題材を吸収し
ようというのはお勧めできません。
このチュートリアルは3つの部分で構成されています。最初の部分は、
関数プログラミングにおけるモナドの基本的な役割についての理解を目指します。
どのようにモナドを操作するか。Haskell では、どのように宣言し、どのように
使うのかということを学びます。2番目の部分は、Haskell の標準的モナドを
カバーします。モナドの定義を与え、モナドの使いかたについて議論します。
最後3つ目の部分は、モナド変換子に関連する高度な題材とモナドを使って
プログラミングする場合にでくわす現実的な問題をカバーします。
このチュートリアル全体は、
tgz 形式のアーカイブファイルあるいは
zip 形式のアーカイブでダウンロードできます。
ほんとうにモナドを理解するには、モナドを使ったコードを経験することが最良
の方法です。このチュートリアルでは、単純なものからほどよく複雑なものまで、
たくさんのコード例が用意されています。これら
のコードを研究し、遊んだり、変更したりしてみることをお勧めします。
残念ながら、最初の方の例は複数のモナドの合成にまつわる問題を避けるた
めに不自然なものにせざるをえませんでした。コード例をいじるのにこの
制約がうっとうしければ、III部でこの問題がどのように克服されているかを先
に見てください。
英語原文についてのコメント、訂正、示唆はなんでも Jeff Newbern
jnewbern@yahoo.com へ。
[この翻訳文は原著者の承諾を得てここで公開しているものです。この翻訳文へ
の感想、誤りの指摘などは、
こちらまでお願いします。]
目次
第I部‥モナドを理解する
●イントロダクション
●モナドとは何か
●なぜモナドを理解しようとするのか
●モナドに触れる
●型構築子
●Maybe というモナド
●例
●リストもモナド
●要約
●class で使う
●Haskell の型クラス
●Monad クラス
●例のつづき
●do記法
●要約
●モナド則
●三つの基本則
●失敗は付けたし
●出口はない
●Zero と Plus
●要約
●練習問題
●Haskell におけるモナドのサポート
●標準プレリュードでは
●Monad モジュールでは
●要約
第II部‥標準的モナドのカタログ
●イントロダクション
●Identity モナド
●概観
●動機
●定義
●例
●Maybe モナド
●概観
●動機
●定義
●例
●Error モナド
●概観
●動機
●定義
●例
●List モナド
●概観
●動機
●定義
●例
●IOモナド
●概観
●動機
●定義
●例
●State モナド
●概観
●動機
●定義
●例
●Reader モナド
●概観
●動機
●定義
●例
●Writer モナド
●概観
●動機
●定義
●例
●Continuation モナド
●概観
●動機
●定義
●例
第 III 部‥現実のモナド
●イントロダクション
●モナドの合成は難しい
●入れ子になったモナド
●合成されたモナド
●モナド変換子
●変換子の型構築子
●もちあげ
●標準モナド変換子
●MonadTrans クラスおよび
MonadIO クラス
●標準モナドの変換子バージョン
●モナド変換子の解剖
●モナド定義の合成
●もちあげ関数を定義する
●ファンクタ
●さらにモナド変換子の例
●IOと WriterT
●IOと ReaderT
●List と StateT
●変換子スタックの管理
●正しい順序の選択
●複数の変換子を使う例
●多段もちあげ
●さらなる探究
Appendices
●付録 I - モナドの物理的なアナロジー
●付録 II - Haskell のコード例