Haskellにおけるタグ付きデータ(SICP 2.4.2)
SICP(通称「魔法使いの本」)の2.4.2節をもとに、タグ付けによるデータの複数表現のサポート方法をHaskellで解説。複素数の直交形式と極形式という異なる表現を、動的型付けを含めてSICPのLispコードに可能な限り忠実に再現しながら実装する方法を示す。
背景メモ
SICP(Structure and Interpretation of Computer Programs)は、MITで長年使われた計算機科学の名門教科書で、「ウィザード本」の通称でも知られる。Lisp(Scheme)を使ってプログラミングの抽象的思考を教えることで有名だが、実務的なコードというより概念の理解に重きを置いている。
この記事では、SICPの2.4.2節「タグ付きデータ」をHaskellで再現している。元のSICPでは、複素数を「直交座標形式(実部+虚部)」と「極座標形式(絶対値+角度)」の2通りの表現で扱えるようにする問題をLispで解いている。記事の著者はそれをHaskellに移植し、あえて動的型チェック的な仕組みをHaskellの型システム上で模倣している点が特徴。
Haskellは静的型付け言語で、通常はコンパイル時に型が決まる。それに対し、SICPがベースにしているLisp(Scheme)は動的型付けであり、「実行時にデータにタグを付けて振る舞いを切り替える」という発想がHaskellの流儀とは異なる。このギャップをどう埋めるかが記事の読みどころ。