適宜更新します。
実用的でない例題
「他の言語だと雑多になるけど、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版にはこの付録を付けていません。