Real World Haskell の古いところ
Real World Haskell の内容が古くなってきたので、どこが古いかとか、それに変わる新しいものは何とか、まとめたいと思う。

Real World Haskell―実戦で学ぶ関数型言語プログラミング
- 作者: Bryan O'Sullivan,John Goerzen,Don Stewart,山下伸夫,伊東勝利,株式会社タイムインターメディア
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/10/26
- メディア: 大型本
- 購入: 8人 クリック: 245回
- この商品を含むブログ (76件) を見る
1章 始めましょう
今でも通用する。
2章 型と関数
今でも通用する。
3章 型を定義し、関数を単純化する
今でも通用する。
5章 ライブラリを書く
5.14節では、"runghc Setup build" のように Setup.hs を実行しているが、現在では "cabal" コマンドを使うのが一般的だ。
% cabal configure % cabal build % cabal install
なお、以前よく起っていたライブラリの依存地獄は、cabal が sandbox をサポートしたことにより解決している。使い方は、@ma0e さんのブログを参照。
6章 型クラスを使う
6.11節の NoMonomorphismRestriction は、GHC 7.8 からはデフォルトとなっているので、指定しなくてよい。
7章 入出力
今でも通用する。
8章 効率的なファイル処理、正規表現、ファイル名マッチング
今でも通用する。
9章 入出力事例研究
9.9節は読まずに、conduit と filesystem-conduitライブラリを理解する方がよいと思われる。
9.10節のレイアウトスタイルよりも、Johan のレイアウトスタイルのほうがいいだろう。
10章 コード事例研究
今でも通用する。
11章 テストと品質保証
QuickCheck はバージョンが1から2になった。だいたい今でも通用でするが、generate 関数はなくなった。また、Test.Quickcheck.Batch モジュールもなくなった。テストを一括処理したい場合は、Haskellの単体テスト最前線を参照のこと。
12章 バーコード認識
僕試した限りでは、この章のコードはちゃんと動かない。バーコードのコードはスルーして、配列、リスト内包表記、および Data.Map を勉強するのがよい。
14章 モナド
今でも通用でする。
15章 モナドを使ったプログラミング
- liftM は忘れて <$> を使う
- ap は忘れて <*> を使う
- MonadPlus は忘れて Alternative を使う
- mplus は忘れて <|> を使う
- mzero は忘れて empty を使う
15.8節では、型クラスが使われているが、最近では Free モナドや Operational モナドの方がいいかもしれない。
16章 Parsec を使う
Text.ParserCombinators.Parsec は使わない。代わりに、
import Text.Parsec
とする。入力の型が、String、ByteString、Text から選べる。たとえば String の場合は、以下も import。
import Text.Parsec.String
Applicative スタイルを導入した後に、liftA2 などを使っているのは、修正ミスだと思われる。(Bryan は RWH 執筆時に Applicative スタイルを教えてもらったと思われる。)
18章 モナド変換子
@objectxplosive さん、@khibinoさんとの議論から:mtl が依存している transformersを勉強しよう。これには MaybeT が定義されている。
21章 データベースを使う
@khibinoさんより:今でも通用する。
22章 規模の大きい例
http-client や xml-conduit ライブラリを使う方がいいと思われる。
23章 gtk2hsを使ったGUIプログラミング
@ma0eさんのブログの後半を参照。
24章 並行マルチコアプログラミング
素直に Parallel and Concurrent Programming in Haskellを読む方がよい。なお、この本は将来翻訳される予定。
25章 プロファイリングと最適化
@ma0eさんのブログの前半を参照。
26章 高度なライブラリ設計
ST モナドだけ読めばよい。
27章 ソケットと syslog
今では、Network.Socket ではなく、Network.Socket.ByteString を使うのが普通。
sClose の代わりに Network.Socket.close を使おう。
28章 ソフトウェア・トランザクショナル・メモリ
今でも通用するが、Parallel and Concurrent Programming in Haskell を読む方がよい。