The Haskell 98 Report
top | back | next | contents | function index
Haskell は汎用の純粋関数型プログラミング言語で、プログラミング言語 設計の分野での最近の革新の多くが取入れられている。Haskell が提供する のは、高階関数、非正格の意味論、静的多相型付け、利用者定義の代数的デー タ型、パターン照合、リストの内包表記、モジュールシステム、モナド I/O システムである。また、さらに次のような豊かなプリミティブデータ型が用 意されている。リスト、配列、任意倍長整数、固定倍長整数、浮動小数点数。 Haskell は遅延評価型関数型言語に関する長年の研究を凝縮したものであり、 また、その頂点にたつものである。
このレポートは Haskell で書かれたプログラムの構文とそのプログラムの 意味に対する非形式的抽象意味論を定義するものである。Haskell のプログ ラムがどのように処理され、解釈され、コンパイルされるかなどといった部 分に依存する実装の問題には触れない。ここではとりあげない問題にはプロ グラミング環境の性質や未定義(すなわち、形式的には _|_ と評価される)プ ログラムに関するエラーメッセージも含まれる。
この節では、Haskell の抽象構文構造と抽象意味論構造について説明する。 またこのレポートの他の部分の組立てとの関係についても説明する。
このレポートは Haskell の構文構造をボトムアップに説明を進める。
上では言及しなかったが、 6 章では Haskell に 標準で組み込まれている型と型クラスについて、 7 章では Haskell の I/O (すなわち、 Haskell のプログラムはどのようにして外の世界と通信するか)について議論 する。また、いくつかの章では、プレリュード、具象構文、文芸的プログラ ミング、導出インスタンスの仕様、殆んどの Haskell コンパイラでサポート されているプラグマについて説明する。
このテキストでは Haskell のプログラムの断片は、タイプライタフォント
で示す。
let x = 1
z = x+y
in z+1
Haskell のコードの任意の部分を表現するプログラム断片の「穴」は
if e1 then
e2 else
e3 のようにイタリックで書く。
一般的には、イタリックの名前はニーモニックになっていて、e は式
を、d は宣言を、t は型を表わす。
Haskell は関数プログラミングの世界で人気になった多くの便利な構文構 造を採用した。このレポートでは、そういった糖衣構文の意味をより単純な 構成に変換することで与える。もし、これらの変換がどの場合にも、過不足な く適用されれば、結果は Haskell のカーネルと呼ぶ Haskell の小 さいサブセットで書かれたプログラムになる。
このカーネルは形式的に仕様化されてはいないが、本質的には、直接的な 表示的意味論をもつラムダ計算に少し糖衣構文をつけくわえたものである。 それぞれの構文構造のカーネルへの変換は、その構文を導入した時に与える。
一つの式は評価されると一つの値となり、一つの式は一つの静的 な型を持つ。Haskell では値と型がまぜこぜになることはない。し かしながら、型システムではいくつもの種類の利用者定義のデータ型を許し ている。また、(伝統的な Hindley-Milner の型構造を使用した)パラメータ 多相性ばかりではなく、アドホック多相性あるいは(型クラスを使 用した)多重定義も許されている。
Haskell におけるエラーは意味論的には _|_ と同等である。技術的にはエ ラーは非停止と区別がつかないので、Haskell ではエラー検出あるいはエラー 発生時の動作についての機構は言語には含まない。もちろん、実装ではエラー に関して有用な情報を提供しようとすることになろう。
Haskell には 6 種類の名前がある。変数名、構成子名 は値を表し、型変数名、型構成子名、型クラス名 は型システムに関わる実体への参照であり、モジュール名はモジュー ルへの参照である。名前をつけるにあたっては、以下のような制約がある。
この 2 つだけが制約である。たとえば、Int は一つの有効範囲 のなかで同時にモジュール名、クラス名、構成子名になることができる。
The Haskell 98 Report
top | back | next | contents | function index
December 2002