-XEmptyDataDeclsフラグ(または同等のLANGUAGEプラグマ)が指定されていると、構築子なしでデータ型を宣言できるようになる。例えば、以下のようにである。 data S -- S :: * data T a -- T :: * -> * 構文的にいうと、この宣言は「= constrs」の部分を欠いている。このように定義される型は多相的でも良く、さらにどのような種について多相的でも良いが、種が*でないなら、明示的な種注釈を使う必要がある。(7.13.5. 明示的に種付けされた量化を見よ) このようなデータ型はボトムというただ一つの値しか持たないが、「幽霊型(phantom type)」を定義するときには便利なことがある。 Haskellは、データ型に文脈を与えることを許している。例えば以下のように。 data Eq a => Set a = NilSet | ConsSet