kuwana-kbの開発/学習ブログ

プログラミング、クラウドインフラのWeb開発/学習ブログ

「プログラミングHaskell 第2版」 書評

おはようございます、 kuwana-kb です。

前回、「すごいHaskell たのしく学ぼう!」(以下すごいH本)の書評を投稿しました。 今回はさらにHaskellへの理解を深めるべく「プログラミングHaskell 第2版」を読んだので書評としてまとめたいと思います。

プログラミングHaskell 第2版

プログラミングHaskell 第2版

  • 作者:Grahum Hutton
  • 出版社/メーカー: ラムダノート
  • 発売日: 2019/08/02
  • メディア: 単行本(ソフトカバー)

本書の紹介

本書はHaskellの入門書です。 2009年に日本語訳の第1版が発売され、つい最近の2019年8月に第2版が発売されました。 私は第1版を読んだことがないのですが、第2版は最近のHaskellの変化に合わせて内容が刷新されているようです。

  • 前提となるコンパイラが現在の主流なもの(ghc)に変わった
  • ファンクター、アプリカティブ、モナドの解説が充実した
  • 一部動作しない例題が動作するようになった
  • 練習問題が増えた

具体的な違いについては、訳者の方が書かれている記事にて確認できます。

kazu-yamamoto.hatenablog.jp

ざっくり 3 行でいうと

  1. 題材がおもしろい
  2. モナドや再起処理の説明が丁寧
  3. すごいH本と比較すると内容は難しめ

この本の 3 つのポイント

1. 題材がおもしろい

本書ではHaskellを学ぶのに興味深い例題が登場します。 以下に例題をいくつか挙げます。

  • シーザー暗号
  • 投票アルゴリズム
  • カウントダウン問題
  • 三目並べ
  • 計算器(パーサー)

これらの例題は、それまでの章で学んだ概念を実践的に活用するので学習の方法として効果的でした。 また、数学的な要素も含まれるため問題を解く過程も勉強になりました。

特によかった問題は、カウントダウン問題と計算器(パーサー)です。

カウントダウン問題は、最も簡単な解決方法から実装して、後から性能を改善していくという工程がよかったですね。 最初と最後の実装を比較するとおよそ100倍の速度がある点に驚きました。

計算器(パーサー)の実装は、「文字列から構文木を生成して数式の結果を返す」という内容なのですが、モナドの便利さを実感できた題材でした。 また、パーサーの仕組みの理解にもつながりました。ちょうど最近Rustのproc_macroを触ったのですが、引数を解釈する処理も似たような構造になっているのかなーと。

2. モナド再帰処理の解説が丁寧

私の中でまだ理解が浅いモナド再帰処理の解説が丁寧だった点がよかったです。

わかりやすさに寄与していた要素としてまず挙げられるのが図でしょう。 例えば以下の図に助けられました。

  • 12章のStateモナド。関数のinputとoutputを図で表現していた
  • 13章のモナドパーサー。再帰的な構文木のデータ型を図で表現していた

また、再帰処理の解説において、式を1つずつ適応して途中の結果がどうなっているか説明がなされている点がよかったです。

ちなみに、個人的に一番良かった章はモナドパーサーの解説がある13章です。 関数が含まれた型であるParserに対してモナドを実装するというのが複雑に感じられたのですが、それをわかりやすく解説しています。 また、モナドのありがたみがわかりやすいという点でも良い章でした。

3. すごいH本と比較すると内容は難しめ

冒頭でも説明した通り、文体がアカデミックです。 こういう形式の本をよく読む人であれば問題ないと思いますが、すごいH本の直後にこれを読んだ私は少し戸惑いました。(すごいH本がポップすぎるという説もある)

また、題材もすごいH本と比べると難しめに感じました。 各章で取り上げられる例題は数学の要素も含んでいて、高校数学レベルの理解が必要そうです。 数学に苦手意識のある私にはちょっと難しく感じました。 恒真式検査器の例題で「そういや高校の頃こんなのやった気がするな〜」と懐かしい気持ちにもなりました。 ああ…高校数学からやり直さないと…

特に難しく感じたのは、最後の方にある「16章 プログラムの論証」と「17章 コンパイラの算出」です。 これは理解を深めてからまた読み直したい…

まとめ

「プログラミングHaskell 第2版」は、Haskellの理解を深めるのに適した本です。 すごいH本のあとに読んで正解だったと感じられる本でした。

「プログラミングHaskell 第2版」と「すごいHaskell たのしく学ぼう!」、どちらもHaskellの入門書ではありますが私としてはどちらか片方とは言わず、両方ともおすすめしたいです。