あどけない話

Internet technologies

最高のHaskell入門書

輪講で「Programming in Haskell」をようやく読み終えました。この本は、最高のHaskell入門書といって間違いないでしょう。

Programming in Haskell

Programming in Haskell

一緒に Haskell の本を何か読もうという話が、友達との間で出たとき、最初は「The Craft of Functional Programming」にしようかと思っていました。ただ、出版社の人から「Programming in Haskell」を勧められたことがあったので、二冊を友達に提示したところ、直感で「Programming in Haskell」を選んできました。

正直な話、薄い本だし、内容はすべて知っていることだろうと、舐めていました。しかし、各章を読み、章末の問題を解いていく過程は、驚きの連続でした。なんと奥深い本なんだろうと。

目次

著者の Hutton さんは、大学の教授で、PowerPoint の資料も用意していることから、実際に教鞭もとっているのでしょう。この本は以下の13章からなり、一学期の講義にちょうどよいように作られています。

  • 導入
  • はじめの一歩
  • 型とクラス
  • 関数定義
  • リスト内包表記
  • 再帰関数
  • 高階関数
  • 関数型パーサー
  • 対話プログラム
  • 型とクラスの宣言
  • カウントダウン問題
  • 遅延評価
  • プログラムの論証

感激の内容

僕が特に感激したのは、以下の内容です。

リスト内包表記

他の本では、著者がリスト内包表記をあまり理解していないためか、「リスト内包表記を使うとプログラムが分りにくくなる」と書いて、ほとんどリスト内包表記について説明しません。一方、この本では、まるまる一章が割り当てられています。

著者は「導入」の章で、Haskell の長所としてリスト内包表記を挙げています。他のいい加減な本に影響されていた僕は、「えー、そうなの?」と疑問に思いました。でも、読んでビックリ。本当にリスト内包表記は便利なのです。

友達は、Project Eulerが簡単に解けるようになったと、驚いていました。

この章だけでも、この本は「買い」です。

関数型パーサー

僕は Hutton さんの別の論文で勉強していたので、感激は薄かったかもしれません。でも、説明は論文よりも洗練されていました。この内容については、「モナディック・パーサー」に詳しく書いていますので、そちらを参照して下さい。

対話プログラム

Haskell の main の型は IO () ですから、何か入力を取り、そして何かを出力するフィルターを書くのは簡単です。でも、それを繰り返す対話プログラムを書く方法は、意外と解説されていません。

答えを言えば、IO モナドの中で再帰すればいいのです。しかし、モナド再帰も理解しにくい概念ですから、説明の技量が試されます。この本では、IO モナド再帰も分りやすく解説しています。

カウントダウン問題

切符が使われていた時代に、切符に書いてある数字を使って 10 を作る遊びをしませんでしたか? その問題を解いていきます。問題をよく吟味すれば、もっと早く解けるという最適化の手法をさりげなく解説しています。

僕にとって驚きだったのは、さまざまなリストを生成する関数です。この件は、「珠玉のリスト・プログラミング」に書きました。僕の感激が伝わると嬉しいです。

プログラムの論証

Haskell では、単純なループさえも再帰で実現しなければなりません。これを欠点と考える人もいるようです。でも再帰のおかげで、プログラムの正当性を数学的帰納法で証明できます。この章には、数学的帰納法の例題がたくさん載っています。

その他

各章末には、参考文献への言及があり、それらにあたってみることで、僕の Haskell の世界は広がりました。

また、付録に標準ライブラリの実装例があります。Haskell 入門者の不満の一つは、標準ライブラリのよい解説書がないことです。この本では、その不満が解消されるとともに、実装例を読むことで、Haskell 流のプログラミングが、すっと頭に入ってくることでしょう。

Haskell を学ぼうとする日本人は、現在不幸な状況にあると思います。出版されている日本語の Haskell 入門書2冊は、どちらも質が低いし、web のチュートリアルは難解なものが多いからです。

これから Haskell を学ぼうとする人は、まず「Programming in Haskell」を読みましょう。それが Haskell を学ぶための、一番の近道です。

大学で関数型言語の講義があるなら、この本を教科書にしてみてはいかがですか?

Hutton さんには、いくつかの質問をメールで送りました。すると、いつもすぐに返事が返ってきます。Hutton さんは、本当にいい人のようですね。この本には、彼の人間性がにじみ出ている気がします。

この本が、翻訳されることを強く願います。