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