あどけない話

Internet technologies

Real World Haskell の古いところ

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

Real World Haskell―実戦で学ぶ関数型言語プログラミング

Real World Haskell―実戦で学ぶ関数型言語プログラミング

1章 始めましょう

今でも通用する。

2章 型と関数

今でも通用する。

3章 型を定義し、関数を単純化する

今でも通用する。

4章 関数プログラミング

ghc に --make オプションはもう不要。

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 を勉強するのがよい。

13章 データ構造

今でも通用でする。

差分リストを理解したら、ByteString を効率よく連結する blaze-builder も勉強しよう。

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 スタイルを教えてもらったと思われる。)

17章 CとのインターフェイスFFI

今でも通用する。

18章 モナド変換子

@objectxplosive さん、@khibinoさんとの議論から:mtl が依存している transformersを勉強しよう。これには MaybeT が定義されている。

19章 エラー処理

この章は読まなくてよい。以下を読もう。

20章 Haskellシステムプログラミング

時間に関するライブラリについては、以下を参照。

21章 データベースを使う

@khibinoさんより:今でも通用する。

22章 規模の大きい例

http-clientxml-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 を読む方がよい。