Subscribed unsubscribe Subscribe Subscribe

GADTsとかPhantom typesとかExistential typesとか

Haskell

長い文章を書くのに挫折したので、短くまとめる。

3つを一言で表すとこうなる。

  • GADTsは、あるデータ型T aがあったとして、データ構成子の結果型がT a以外の型になっているような型
  • Phantom typesは、データ構成子で使われていない型変数を引数にもつ型
  • Existential typesは、型引数に現れない型変数を含む型

GADTsを使ってExistential typesが書ける。もちろんforallキーワードを使っても書ける。Phantom typesはDaan LeijenとErik Meijerの"Domain Specific Embeded Compilers"の中では単に上のように表現されているけど、James CheneyとRalf Hinzeの"Phantom Types"や関数プログラミングの楽しみの12章では、GADTsが必要な型(つまり構成子の結果型の型を指定したい)として書かれている。