Prev: 目次 | TOC: 目次 | Next: モナドに触れる |
モナドは値およびその値を使う計算の並びという観点からいえば、計算を構造化 する方法です。モナドを使うと、プログラマはひとならびのブロックを使って計 算を構築することができます。このブロックはそれ自身計算の並びです。モナド はどのように合成された計算が新しい計算を形成するかを決定します。これによ り、要求があるたびに組み合わせを手でコーディングしなければならないプログ ラマを解放してくれます。
モナドを、計算を合成して、より複雑な計算にする戦略と考えると
いいでしょう。たとえば、Haskell の Maybe
型については
よく馴染んでいると思いますが、
data Maybe a = Nothing | Just aこれは結果を返しそこなうかもしれない計算の型を表現しています。
Maybe
型が示唆するものは、Maybe
型の値を返す計
算の合成に関する戦略です。合成された計算が、ひとつの計算 B
で構成され、この計算が別の計算 A
の結果に依存している場合、
合成された計算は、A
または B
が
Nothing
になれば必ず Nothing
にならなくてはな
りません。また、合成された計算は両方の計算が成功する場合には
A
の結果に B
の結果を適用したものにならなくて
はならない。
入出力を実行した計算、状態を持つ計算、複数の結果を返す計算などを構築する ための別のモナドが存在します。計算を合成する戦略がたくさんあるように、い ろいろなタイプのモナドがたくさんありますが、特別に役に立つものや Haskell 98 libraries の一部とするに足る共通のモナドというのがいくつかあります。これらのモナド は第 II 部で解説します。
インターネット上にはいくつものそれぞれ別の モナドチュートリアルが存在しますが、このことはモナドの概念を理解する ことが多くの人にとって難しいことを示しています。これは、モナドの抽象的性質 によるものであり、それらがいくつかの異る制限のなかで用いられるという事実 によるものです。このことが、モナドとは何か、何に役立つのかを具体的に描く ことを混乱させているのです。
Haskell ではモナドは入出力システムで中心的な役割りをしています。Haskell で 入出力を行うのにモナドを理解することは必須ではありませんが、入出力モナド を理解していることはコードと能力の向上をもたらすことでしょう。
プログラマにとってモナドは関数プログラムの構造化に有用なツールです。 モナドには、それを特に有用なものとしている 3 つの性質があります。
Prev: 目次 | TOC: 目次 | Next: モナドに触れる |