我有一個數據類型,我通過ghc 7.4.1中的DataKinds和一個給定的類型類型,我想用來做類型特定的操作。如何創建升級類型的類型類實例?
data Type = TInt32 | TInt64 | TInt16
class TypeTraits a where
...
然後我嘗試創建提升類型的類型類實例,像這樣:
instance TypeTraits TInt32 where
...
我得到以下類型的錯誤:
Kind mis-match
The first argument of `TypeTraits' should have kind `*',
but `TInt32' has kind `Type'
In the instance declaration for `TypeTraits TInt32'
試圖通過指定要解決這個問題'a'的種類:
class TypeTraits (a :: Type) where
...
Kind mis-match
Expected kind `ArgKind', but `a' has kind `Type'
In the type `a -> String'
In the class declaration for `TypeTraits'
你究竟能把什麼放到'''區域? 'TInt32'不是一個有人居住的類型,所以它不能在價值位置使用'a'。我猜像'crazyThing :: TypeTraits a => SomeTypeConstructor a'?我很難想象這樣的事情可能是有用的,但如果我真的伸展,我可以想象它有用*不知何故*。也許。 – 2012-04-24 04:33:21
這個想法是有每個實例的特徵。所以我沒有在尋找值,而只是一個佔位符來指定類型類型,因此我想在那裏選擇函數。 例如:class TypeTraits(a :: Type)其中type HType a sizeOf :: Proxy a - > Int' – Chetan 2012-04-24 15:51:48