SSブログ

"Programming in Haskell" by Graham Hutton を読んだ [Haskell]

大学1年生にも教えられますという謳い文句?の Haskell 本。最終章以外大体読み終わったので感想など。

第1印象としては、この本は見開きの左右がそれぞれ3分の1くらい余白になっていて、そこが良いと思った。註は一切ないのでこれは書き込み用の余白を拡げてくれているのだろう。

教育的な本では概念を登場させる順序というのが命で、殆どそれだけで成否が決まるといっても過言ではないけど Haskell の場合は入出力をどこでどう登場させるかというのが最大の問題になると思う。「後で説明するから今はおまじないだと思って読んでね」というのも手ではあるけどこれは学習者の意欲を削ぐ結果になるかもしれない。

この本ではどうしているかというと、まず最初のうちは Hugs を使ってインタラクティブシェル上でプログラミングする。これで入出力のことはしばらく考えずに進めることができる。
入出力が出てくるのは第9章だが、実はその1つ前に Functional Parsers という章があって、そこでパーサを組み立てていく過程で Parser 型とそれに対する return 関数、>>= 演算子を定義して、do 構文もそこで導入している。そうすることで後で IO 型を導入するときに前章の Parser 型になぞらえて理解ができるように準備しているのだ。そしてさらに後の章になって Parser 型と IO 型の類似は実は偶然じゃなくて Monad クラスによって一般的に捉えられるよ、という風に進む。
私はこの構成は理解しやすいと思った(やっとわかった気になった)。他の点でも順序がよく練られている印象がある(遅延評価の話が出るのがずいぶん遅くて、それが何でかなと思った以外は)。

一方この本で1つ嫌いだった部分は、著者は Maybe a 型の変わりに [a] 型(a のリスト型)を使うのが好みのようで(Nothing を空リスト、Just を1要素リストで表す)、Maybe を導入した後ですらその書き方を使う。曰く、リスト内包表記を使って簡潔に書けるからだそうで、この人はリスト内包表記に1章を費やすくらいリスト内包表記好きらしい。
Haskell 界でこういう書き方が一般的なのかどうか分からないけど、リスト型がこういう風に使われているかもしれないということになったら [a] 型を見るたびにそれが Maybe 型の代わりなのか本当にリストなのかを考えないといけなくなる。
例えば著者が上記の弁明をした次のページに [a] -> [([a], [a])] という型が出てくるが、この型の本当の意味が 2^4 通りのうちどれなのかは説明かコードを読まないと分からないということになってしまう。これは学習者の邪魔をしているだけだし、型で考えるということの模範にならないと思う。

あとコード中の表記でわざわざ \ じゃなくてλって書いたり ^ じゃなくて↑って書いたりするのは何なんだろうと思った。The Reasoned Schemer もひどいものだったことを思い出したけど、海外にはこういう主義の人が一定数いるんだろうか。

とはいえ全体としてみれば入門書としてのこの本の分かりやすさはすばらしいと思う。私のような文系頭の人間でも困難を感じずに読める。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。