この本は純粋関数型言語Haskellの入門書です。 名著とよばれるものは、誰でも知っているような非常に簡単なことから説明を始め、気がついたら高みに導かれているという体験をさせてくれるとよくいいますが、この本はまさにそれです。
これはHaskellの機能を広く浅く紹介してくれますが、浅いといっても基本的なところはしっかりと抑えており、なによりも読んでいて楽しい本です。こんな楽しい本は久々でした。 この本はプログラミングをしたことのない人もターゲットにしていて、Haskellの言語自体の紹介をすると同時に関数型プログラミングの考え方やテクニックを無理なく紹介してくれています。 また、章末の練習問題も適度な難易度で、楽しく達成感を味わいながら理解を深めていくことができます。
またこの本がすばらしいのは、Monadについてもきちんと紹介している点です。 MonadというのはHaskellがもっている高度な概念で、難しい概念と恐れられています。 これは「MonadといえばHaskell」というくらいの目玉機能で、Haskellを学ぼうとする人は誰しもがこれを理解しようと試みるのではないでしょうか。
実際、僕もMonadをある程度理解するのにはゆっくりですが1年以上かかりました。 まあ理解したといっても、Monadを使ったコードが多少読み書きできる程度で、これを駆使出来るほど深い理解はできていません。
最近、日本語のHaskellの本が数冊出版されていますが、これらの本ではMonadの解説をある意味放棄してしまっています。
しかし、この本ではIO MonadというMonadのうちの1つに絞って非常に限定した説明になってはいますが、それでもMonadの基本はきちんとおさえています。僕はこの解説によって、目から鱗が落ちました。ここの解説で印象に残っているのが、Worldという仮想的な型を導入して、
type World whose values represent the current state of the world. (世界の現在の状態を表現するWorld型)
という表現していたのがすごくカッコよかったです。
また、日本語のHaskellの本ではほとんど省略されていた、プログラムの正当付けについても説明している点もいいですね。
Haskellではプログラムの動作を証明し、プログラムを正当付けするといったことをします。とくにHaskellでは無限リストという無限のデータ列を扱えるために、たとえば無限リストの長さを計算しようとすると無限ループに陥ってしまいます。その無限を扱うために皆さんも高校で出会った数学的帰納法を用いますが、この本ではその基本的なところを解説しています。
全体を通して、この本は今まで読んだHaskellの入門書やWebページの中で一番オススメできる本でした。
|