HaskellのGHC言語拡張に含まれる存在型は、existential quantifierを使わずにuniversal quantifierと代数的データ型を組み合わせて表現されます。以前からどうしてこんなことができるのかと思っていたのでそのカラクリを調べてみました。 GHC言語拡張では存在型を次のように定義できます。 {-# LANGUAGE ExistentialQuantifications #-} data Q = forall x. P x このように型引数を取らないデータ型のデータ構成子に、全称量化された変数を持つような型を定義します。この定義は直接existential quantifierを使えば次のように表現できるものです。 -- 疑似Haskell。GHCではコンパイルできない。EHCならできるかも。 data Q = P (exists x. x) データ構成子の