TAPL
その名の通り、
型システムについての定番の入門書。ただし「研究者としての」入門書なので、間違ってもプログラミング初心者向けではない。

型理論系の研究室のゼミとかで読まれているイメージ。これを読むと型システムの論文を読めるようになる。

静的型検査をする言語を設計したいのであれば、前半は特に参考になるだろう。後半はいろんな型のカタログ的な感じなので興味があるところを読めばいい。
言語処理系を作っている人、特に静的型付きプログラミング言語のそれを作ってる人にはおすすめの「型システム入門書」


さんと同意見。
末尾の訳語集と索引を組み合わせると、型システムに関わる専門用語集としても使える。

Haskellとかをやってると、結構頻繁にテクニカルタームとして出くわす。

静的型付き言語の型システムの設計をするための「入門書」としても読める。

ジェネリクスと継承を組み合わせたときの問題点と解決策とか、モダンな言語を作ろうとするとハマりがちな点も書かれてるので、通読する・しないに関わらず、一家に一冊?置いておきたい本。

TAPLと略すときと、TaPLと略すときがある。たぶんどっちでもいい。

サンプルコードがほんのちょっと古いので、もしかすると
OCamlコンパイラのバージョン依存な問題を踏むかもしれない。stringとbyteのうんぬんかんぬんだった気がする…

以下

が上述したサンプルコードの問題の詳細(もし気が向いた人がいれば別記事に切り出してかまいません)
現在のOCamlには、変更不能な文字列を表すstringと、変更可能な文字列(バイト列)を表すbytesがあります。一方、古いOCamlでは、現在bytesと呼ばれているものがstringでした。TaPLのプログラムはその時代に書かれたので、現在のOCamlコンパイラでTaPLのプログラムをコンパイルするためには、stringの挙動を過去のものに戻す必要があります。そのオプションが-unsafe-stringなのですが、名前の通りこのオプションはunsafeなので、4.10.0以降のOCamlコンパイラでは、ビルド時に-unsafe-stringを許可するよう設定しなくてはいけません。というのがこの問題の詳細です。
opamを使っているなら、次のコマンドでocamlをビルドすることで-unsafe-stringオプションが使えるようになるはずです。4.12.0のところは他のバージョンに変えても動くはず。
$ opam switch create 4.12.0+default-unsafe-string --package=ocaml-variants.4.12.0+options,ocaml-option-default-unsafe-string
$ opam switch 4.12.0+default-unsafe-string