適宜更新します。
実用的でない例題
「他の言語だと雑多になるけど、Haskellではこんなに優雅なコードになる」という例は大抵実用的ではありません。本書では、以下の例題がそれに当てはまります。
実用的なコードを知りたいなら「Haskellの神話」を読んでください。
紹介されてないデータ型
実用的なプログラムを書く際には String ではなく Text を使います。textパッケージの Data.Text モジュールで定義されています。Text はリストではありませんので、リストプログラミングでは扱えません。専用の API を使って操作します。
非負の整数を表すデータ型は Word です。Data.Wordモジュールで定義されています。8.3節の例は、Wordを使えば安全に定義できます。
newtype Nat = N Word
ちなみに、大きさが決まっている Word8、Word16、Word32 および Word64 も提供されています。Int も同様です。
なお、IntやWordにビット操作をしたい場合は、Data.Bitsを利用します。
newtype
8.4節に、newtype でも再帰型が定義できると書いてありますが、例が載っていません。構成子が一個しかないのに、どうやって再帰するのでしょうか? 8.1節に、以下のようなわざと間違った例があります。
type Tree = (Int,[Tree])
これは newtype を使うと、正しいコードになります。
newtype Tree = Node (Int,[Tree])
一般化してみましょう。
newtype Tree a = Node (a,[Tree a])
組み合わせ関数
9.4節に突然 subs、interleaves および perms が出てきます。どういう仕組みなのか知りたい方は、珠玉のリスト・プログラミングを読んでください。初版では付録で解説していましたが、第2版にはこの付録を付けていません。