Prev: 目次 TOC: 目次 Next: モナドに触れる

イントロダクション


モナドとは何か

モナドは値およびその値を使う計算の並びという観点からいえば、計算を構造化 する方法です。モナドを使うと、プログラマはひとならびのブロックを使って計 算を構築することができます。このブロックはそれ自身計算の並びです。モナド はどのように合成された計算が新しい計算を形成するかを決定します。これによ り、要求があるたびに組み合わせを手でコーディングしなければならないプログ ラマを解放してくれます。

モナドを、計算を合成して、より複雑な計算にする戦略と考えると いいでしょう。たとえば、Haskell の Maybe 型については よく馴染んでいると思いますが、

data Maybe a = Nothing | Just a
これは結果を返しそこなうかもしれない計算の型を表現しています。 Maybe 型が示唆するものは、Maybe 型の値を返す計 算の合成に関する戦略です。合成された計算が、ひとつの計算 B で構成され、この計算が別の計算 A の結果に依存している場合、 合成された計算は、A または BNothing になれば必ず Nothing にならなくてはな りません。また、合成された計算は両方の計算が成功する場合には A の結果に B の結果を適用したものにならなくて はならない。

入出力を実行した計算、状態を持つ計算、複数の結果を返す計算などを構築する ための別のモナドが存在します。計算を合成する戦略がたくさんあるように、い ろいろなタイプのモナドがたくさんありますが、特別に役に立つものや Haskell 98 libraries の一部とするに足る共通のモナドというのがいくつかあります。これらのモナド は第 II 部で解説します。

なぜモナドを理解しようとするのか

インターネット上にはいくつものそれぞれ別の モナドチュートリアルが存在しますが、このことはモナドの概念を理解する ことが多くの人にとって難しいことを示しています。これは、モナドの抽象的性質 によるものであり、それらがいくつかの異る制限のなかで用いられるという事実 によるものです。このことが、モナドとは何か、何に役立つのかを具体的に描く ことを混乱させているのです。

Haskell ではモナドは入出力システムで中心的な役割りをしています。Haskell で 入出力を行うのにモナドを理解することは必須ではありませんが、入出力モナド を理解していることはコードと能力の向上をもたらすことでしょう。

プログラマにとってモナドは関数プログラムの構造化に有用なツールです。 モナドには、それを特に有用なものとしている 3 つの性質があります。

  1. モジュラリティ - より単純な計算から計算を合成することができ、実際に 実行される計算と合成戦略を切離すことができます。
  2. 柔軟性 - 関数プログラムをモナドなしで書いた同等のプログラムよりも はるかに柔軟なものとすることができます。これはモナドが、計算戦略を プログラム全体にばら撒くことをせずに、一箇所に引出すからである。
  3. 分離性 - 関数プログラムの本体から安全に分離したままで、命令スタイル の計算構造を生成するのに利用できます。これは、Haskell のような純粋 な関数型言語と入出力のような(参照透明性を破壊するような)副作用と組 み合わせるのに役立ちます。
これらの特徴のそれぞれは、このあとのチュートリアルで特定のモナドの文脈で 再検討します。


Prev: 目次 TOC: 目次 Next: モナドに触れる