Prev: 付録 I - モナドの物理的なアナロジー TOC: 目次

Haskell のコード例

ここにあるのは、このチュートリアルで用意された、すべてのコード のリストです。

例 1

この例は モナドに触れる の節で議論されているものです。

コード例では Haskell の型クラスを使わずにモナドの概念を導入します。 モナドの結合子が結果を返さないかもしれない一連の計算の組み立てを どのように単純化するかを示しています。

例 2

この例は クラスで使う の節で議論されています。

コード例は、最初のコードをもとに構築されており、do 記法が Monad クラスのインスタンス(ここでは Maybe モナドが使われている)でどのように使われているかを示しています。

例 3

この例は Haskell におけるモナドのサポート の節で議論されています。

コード例は、最初の 2つの例を元に構築されています。 そして、いくらか典型的 — ではありますが大変強力な — do ブロックの外での foldM 関数の使い方を示すものです。

例 4

この例は Haskell におけるモナドのサポート の節で議論されています。

コード例では、より典型的な foldM 関数の do ブロック内での 使い方が示されています。ここでは、IO モナド内で foldM 関数 を使って、別々のファイルから読み込まれた辞書の値を合成しています。

例 5

この例は Haskell におけるモナドのサポート の節で議論されています。

コード例では、filterM 関数の do ブロック内での使用が 示されています。ディレクトリを指定する引数のサブセットを印字し、 ディレクトリではない引数は無視するようになっています。

例 6

この例は Haskell におけるモナドのサポート の節で議論されています。

コードは、do ブロック内の liftM 関数の使用例です。 リストにある名前を検索し、もちあげられた String 処理関数を使って、 Maybe モナド内で名前を変更します。

例 7

この例は Haskell におけるモナドのサポート の節で議論されています。

コードは liftM2 の高階適用の例です。List モナド内で もちあげられた操作を畳み込み、そのもちあげられた操作子で要素を組合せた すべての組合せのリストを生成します。

例 8

この例は Haskell におけるモナドのサポート の節で議論されています。

コード例は ap の高階適用の例です。これは、 Maybe (a->a) という関数のリストを ap で畳み込んで、コマンド列を処理します。

例 9

この例は Haskell におけるモナドのサポート の節で議論されています。

コード例は Maybe モナドで msum を使い、束縛環境のスタック から最初にマッチする変数を選ぶ例です。

例 10

この例は Haskell におけるモナドのサポート の節で議論されています。

コードは、Maybe モナドの guard を使って、リストから 述語を満すレコードだけを選択する( filter と同等)例です。

例 11

この例は Maybe モナド の節で議論されています。

コード例は、どのようにして Maybe モナドを使って、 結果を返すのに失敗するかもしれない単純な問合せから、複雑な 問合せを構築するかを示しています。ここでの例は、フルネームまたは ニックネームに基いたメールプリファレンスの検索です。

例 12

この例は、 Error モナド の節で議論されています。

コード例は、Either タイプ構築子をカスタムエラーの型の Error モナドとして使うデモになっています。 例では、16進数をパースして、Error モナドの例外処理機構 を使って、パースが失敗したイベントの中にわかりやすいエラーメッセージ を用意します。

例 13

この例は List モナド の節で議論されています。

コードは、組み込みのリスト型構築子を非決定性計算のモナドとして使う例です。 これは、整数、16進値、単語からなる曖昧な文法をパースする例です。

例 14

この例は、 IO モナド の節で議論されています。

コードは Unix コマンドの "tr" の簡単な実装例です。これは、 パターンマッチング失敗に起因する暗黙の fail 呼出しを 含む IO モナドと catcherror を使う例になっています。

例 15

この例は、 State モナド の節で議論されています。

コードは、明示的に状態を渡すかわりに State モナドをどのように使うか をしめした例です。例では、State モナドを使い、乱数生成器を複数回 呼出す必要のある複合したデータの値を構築しながら、乱数生成器の 状態を管理しする例です。

例 16

この例は、 Reader モナド の節で議論されています。

コードは、Reader モナドを使ってどのように共有環境を含む計算を簡単に するかの例になっています。この例では Reader モナドを使って、単純な テンプレート置換システムを実装します。コードは Parsec のモナドパーサ 結合子ライブラリの使い方の例になっています。

例 17

この例は Writer モナド の節で議論されています。

コードは Writer モナドを使っていかにログ取りを実装するかの例です。 例では、非常に簡単なファイアウォールシミュレータを実装し、Writer モナドを使って、ファイアウォールの活動状況を記録します。

例 18

この例は Continuation モナド の節で議論されています。

コードは Continuation モナドの脱出継続がどのように働くかを示した例です。 例では、複雑な数字の変換を計算しています。

例 19

この例は、 モナドの合成は難しい の節で議論されています。

コードは Continuation モナドがいかに IO モナド内でネストし、適切な 計算構造を与えるかを示す例です。この例は、例 18 を少し変更した ものになっています。

例 20

この例は、 モナドの合成は難しい の節で議論されています。

コードは、モナド変換子を使わないで、いかに Continuation モナドと IO モナドを同時に使うかの例になっています。この例は、例 18 と 例 19 を元に構築されています。

例 21

この例は、 モナド変換子 の節で議論されています。

コードは、いかにして Continuation モナドの変換子版を使って、 継続を使い、入出力を実行する合成モナドを作るかを示す例に なっています。これ例は、例 18、19、20 を元に構築されています。

例 22

この例は 標準モナド変換子 の節で議論されています。

コードは、いかに Writer モナドの変換子版をつかって、ログとりと入出力の 実行をする合成モナドを作るかを示す例です。この例では、例 17 のファイア ウォールシミュレータのログエントリにタイムスタンプを追加します。

例 23

この例は 標準モナド変換子 の節で議論されています。

コードは、Reader モナドの変換子版を使って、いかに共有環境と入出力を合成 するモナドを作るかという例になっています。例では、例 16 のテンプレート システムを使って、テンプレートとしてファイルを使います。

例 24

この例は、 標準モナド変換子 の節で議論されています。

コードは、StateT 変換子を Listモナド上で使い、状態のある 非決定性計算を実行する合成モナドを作る方法の例になっています。例では この合成モナドを使って論理問題を解きます。

例 25

この例は、 複数の変換子を使う例 の節で議論されています。

コードは StateTWriterT の変換子を Listモナド上で使い、ログとりをする状態のある非決定性計算を行う 合成モナドを作りだす例になっています。この例では、その合成モナドを 使い、N-クィーン問題を解きます。

例 26

この例は、 多段もちあげ の節で議論されています。

コードは、lift 関数の使用法とそれを複雑な変換子 スタックで使うさいの管理の必要性を例示したものです。


Prev: 付録 I - モナドの物理的なアナロジー TOC: 目次