The Haskell 98 Report
top | back | next | contents | function index


緒言

"なん人もが構成論理について技術的な著述をしたが、我々も含め、 その大半は間違ったことを書いた。こうした誤ちをおかした我々の仲間の いく人かは、現在この分野では最も注意深く、気鋭の論理学者として名を つらねていることからして、この主題が手強いものである証拠と考える。 したがって、なにもかもを開示することは、正確さを得るために必要な ことであり、過度の濃密化はこの分野においては非効率で、それは通常の 場合よりも顕著である。"

Haskell B. Curry and Robert Feys
in the Preface to Combinatory Logic [2], May 31, 1956

1987年9月にオレゴン州ポートランドで「関数プログラミング言語と 計算機アーキテクチャ」会議(FPCA '87)が催された。 そこでは関数プログラミングのコミュニティでの不幸な状況について 議論された。そのとき既に 1 ダースを越える数の非正格純粋関数型言語が 提案されていた。どれも、表現力と意味論の基盤という点では類似するもの だったのだ。この時の会合ではこのクラスの関数型言語が広く使われる ようにならないのは共通の汎用言語がないからだということで意見が 一致したのである。そこで、共通の言語を設計するために、 新しいアイディアを素早く交換し、実際に使えるアプリケーション開発の ための確固たる基礎と、他の人々にも関数型の言語は使える言語だ ということを知らしめるために、委員会の発足が決議された。 このドキュメントはこの委員会の努力の成果である Haskell という 純粋関数プログラミング言語について記述したものである。 この言語の名は今日我々がよりどころとしている論理学的基礎の 大部分を築く仕事をした論理学者 Haskell B. Curry に因んでいる。

目標

この委員会の主要な目標は以下の制約を満す言語を設計することにあった。

Haskell 98: 言語とライブラリ

委員会の望みは Haskell が言語設計の分野の将来の研究のための基礎を 提供できることである。実験的な機能を取り入れた、この言語の拡張や 変形の出現はのぞむところである。

Haskell は最初の公開以来ずっと進化しつづけている。1997 年の 半ばまでにはこの言語には 4 つのバージョンがあった(その時点で 最新のものは Haskell 1.4 であった)。1997 年にアムステルダムで 開催された Haskell ワークショップにおいて、Haskell の安定した バージョンが必要であると決議された。この安定したバージョン というのがこのレポートの主題であり、これを「Haskell 98」と呼ぶ。

Haskell 98 は Haskell 1.4 の比較的マイナーなバージョンアップであると 考えられ、いくつかの単純化と軽率な落し穴をふさがれた。 このバージョンの意図は「安定した」言語であり、その旨は、実装者は Haskell 98 の仕様を正確にサポートし、それは想定しうる将来に亘るものであ ることを約束するというものである。

元々の Haskell レポートは、Prelude と呼ぶ標準ライブラリと 言語仕様のみをカバーしていた。Haskell 98 が安定したころまでには、 多くのプログラムがより大きなライブラリ関数群(入出力とOSとの単純な インタラクションに関しては顕著に)アクセスする必要が生じていた。 これらのプログラムが可搬性のあるものにするには、ライブラリ群も 標準化されていなければならない。それゆれ、別の(実際にはオーバラップ していたが)委員会により、Haskell 98 ライブラリの確定へむけた努力が なされた。

Haskell 98 言語レポートとライブラリレポートは 1999 年 2 月に公開 された。

Haskell 98 レポートの改訂

一、二年たつと、多くの誤殖や、残念な部分がめだってきた。そこで、 こうした部分の収集と訂正作業を以下のような目標をもって、おこなった。

この仕事は、予想を遥かに越えるたいへんなものであった。Haskell は より広く使われていたため、レポートは予想をはるかに越える人々によって、 丹念に調べられていた。そうした人々からのフィードバックの結果、何百 (その殆どは小さい)もの変更を採用した。元々の委員会は、オリジナルの Haskell 98 レポートが出版されたときに解散していたため、すべての 変更はすべての Haskell メイリングリストに対して提案した。

このドキュメントは、こうした調整、改良プロセスの成果である。これは、 Haskell 98 言語レポートとライブラリレポートの両方を含んでおり、 両方の公式の仕様となっている。これは、 "Gentle Introduction"[6] の ような、Haskell でのプログラミングに関するチュートリアル ではない。このドキュメントは、関数プログラミング言語に ついていくらか馴染んでいるといことを前提としている。

この両方のドキュメントはオンラインで利用可能である (下の「Haskell の情報源」をみよ)。

Haskell 98 の拡張

Haskell は Haskell 98 を越えて進化を続けている。これを書いている 時点で、以下をサポートした Haskell の実装が存在する。

構文糖衣

型システムの革新

制御の拡張

他にもまだある。Haskell 98 はこうした開発を妨げるものではない。 そうではなくて、リファレンスとしての安定点を示すものである。 したがって、教科書を書こうとするものや、Haskell を教材として 使うものは、Haskell 98 (この先もずっとあるもの)の範囲内で、 それらを行うことが可能である。

Haskell の情報源

Haskell のウェブサイト

http://haskell.org

では以下を含む多数の有用な情報源へのアクセスを提供している。

Haskell メイリングリストを通じて、Haskell 言語あるいはこのレポートの 表現に関する改良案、批判をおよせ下さい。歓迎いたします。

言語の構築

Haskell は研究者とアプリケーションプログラマの活発なコミュニティに より作られ、維持されつづけている。この言語とライブラリの委員会に 参加した人々、とりわけ、この言語に多大な時間とエネルギーを貢献して くれた人々を当時の所属とともにここに掲げる。

Arvind (MIT)
Lennart Augustsson (Chalmers University)
Dave Barton (Mitre Corp)
Brian Boutel (Victoria University of Wellington)
Warren Burton (Simon Fraser University)
Jon Fairbairn (University of Cambridge)
Joseph Fasel (Los Alamos National Laboratory)
Andy Gordon (University of Cambridge)
Maria Guzman (Yale University)
Kevin Hammond (Uniiversity of Glasgow)
Ralf Hinze (University of Bonn)
Paul Hudak [editor] (Yale University)
John Hughes [editor] (University of Glasgow; Chalmers University)
Thomas Johnsson (Chalmers University)
Mark Jones (Yale University, University of Nottingham, Oregon Graduate Institute)
Dick Kieburtz (Oregon Graduate Institute)
John Launchbury (University of Glasgow; Oregon Graduate Institute)
Erik Meijer (Utrecht University)
Rishiyur Nikhil (MIT)
John Peterson (Yale University)
Simon Peyton Jones [editor] (University of Glasgow; Microsoft Research Ltd)
Mike Reeve (Imperial College)
Alastair Reid (University of Glasgow)
Colin Runciman (University of York)
Philip Wadler [editor] (University of Glasgow)
David Wise (Indiana University)
Jonathan Young (Yale University)

[editor] のマークはこの言語の一つ以上のリビジョンの監修者であることを 示している。

加えて、何十人もの人々が有用な貢献をしてくれた。いくつかは小さな ものであるったけれど、重要なものであった。こうした人々を以下に掲げて おく。
Kris Aerts、Hans Aberg、 Sten Anderson、Richard Bird、Stephen Blott、Tom Blenko、Duke Briscoe、 Paul Callaghan、Magnus Carlsson、Mark Carroll、Manuel Chakravarty、 Franklin Chen、Olaf Chitil、Chris Clack、Guy Cousineau、Tony Davie、 Craig Dickson、Chris Dornan、Laura Dutton、Chris Fasel、Pat Fasel、 Sigbjorn Finne、Michael Fryers、Andy Gill、Mike Gunter、Cordy Hall、Mark Hall、Thomas Hallgren、Matt Harden、Klemens Hemm、Fergus Henderson、Dean Herington、Ralf Hinze、Bob Hiromoto、Nic Holt、Ian Holyer、Randy Hudson、 Alexander Jacobson、Patrik Jansson、Robert Jeschofnik、Orjan Johansen、 Simon B. Jones、Stef Joosten、Mike Joy、Stefan Kahrs、Antti-Juhani Kaijanaho、Jerzy Karczmarczuk、Wolfram Kahl、Kent Karlsson、Richard Kelsey、Siau-Cheng Khoo、Amir Kishon、Feliks Kluzniak、Jan Kort、Marcin Kowalczyk、Jose Labra、Jeff Lewis、Mark Lillibridge、Bjorn Lisper、 Sandra Loosemore、Pablo Lopez、Olaf Lubeck、Ian Lynagh、Christian Maeder、Ketil Malde、Simon Marlow、Michael Marte、Jim Mattson、John Meacham、Sergey Mechveliani、Gary Memovich、Randy Michelsen、Rick Mohr、 Andy Moran、Graeme Moss、Henrik Nilsson、Arthur Norman、Nick North、 Chris Okasaki、Bjarte M. Ostvold、Paul Otto、Sven Panne、Dave Parrott、 Ross Paterson、Larne Pekowsky、Rinus Plasmeijer、Ian Poole、Stephen Price、John Robson、Andreas Rossberg、George Russell、Patrick Sansom、 Felix Schroeter、Julian Seward、Nimish Shah、Christian Sievers、Libor Skarvada、Jan Skibinski、Lauren Smith、Raman Sundaresh、Josef Svenningsson、Ken Takusagawa、Satish Thatte、Simon Thompson、Tom Thomson、Tommy Thorn、Dylan Thurston、Mike Thyer、Mark Tullsen、David Tweed、Pradeep Varma、Malcolm Wallace、Keith Wansbrough、Tony Warnock、 Michael Webber、Carl Witty、Stuart Wray、Bonnie Yantis

最後に、なにはさておき、ラムダ算法についての Church、Rosser、Curry とその他の人々が準備した重要な基礎的な仕事のほかに、長年にわたり 開発されてきた多くの見るべきプログラミング言語の影響力にも感謝したい と思う。多くのアイディアの源泉をいちいち正確にあげることは難しいが、 とくに、Lisp (とその現代的具現である Common Lisp と Scheme)、 Landin の ISWIM、APL、Backus の FP [1]、ML と Standard ML、Hope と Hope+、Clean、Id、Gofer、Sisal、それに Miranda (Miranda は Research Software Ltd. の商標)で頂点に達した Turner の一連の言語の影響力に感謝したい。 これらの先駆者がいなければ Haskell は誕生しなかっただろう。

Simon Peyton Jones
Cambridge, September 2002


The Haskell 98 Report
top | back | next | contents | function index
December 2002