DataKinds
DataKinds 言語拡張を有効にすると、データコンストラクタを型へ、型を種へ昇格させることができる。
型と値 (通常)
code: (hs)
data SimpleData a = SimpleData a
table:table
通常
値 SimpleData :: a -> SimpleData a
型 SimpleData ::* ->*
種
型と値 (DataKinds 有効)
code: (hs)
{-# LANGUAGE DataKinds #-} data SimpleData a = SimpleData a
DataKinds 言語拡張を有効にすることで、次のような変化が起きる。
table:table
通常 DataKinds
値 SimpleData :: a -> SimpleData a SimpleData :: a -> SimpleData a
型 SimpleData ::* ->* SimpleData ::* ->* 'SimpleData :: k -> SimpleData k
種 SimpleData ::* ->*
新たに、型に 'SimpleData が追加され、種に SimpleData が追加される。
型のみ (DataKinds 有効)
また、値が無い場合も同様に定義可能である。
code: (haskell)
{-# LANGUAGE DataKinds #-} data SimpleData a
table:table
通常 DataKinds
値
型 SimpleData ::* ->* SimpleData ::* ->*
種 SimpleData ::* ->*
この場合はコンストラクタがないため、型は追加されない。
値と型と種の名前空間
そのため、正確にはそれぞれこのような表となる。
型と値の場合
table:table
通常 DataKinds
値 SimpleData :: a -> SimpleData a
型 SimpleData ::* ->* 'SimpleData :: k -> SimpleData k SimpleData ::* ->*
種
型のみの場合
table:table
通常 DataKinds
値
型・種 SimpleData ::* ->* SimpleData ::* ->*
関連する記録