私は、ghc 7.4.1のDataKindsと型固有の操作を行うために使用したい与えられたtypeclassを使って宣伝するデータ型を持っています。昇格型の型クラスインスタンスを作成するにはどうすればよいですか?
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'のようなものを推測していますか?このようなものがどのように役立つか想像するのは難しいですが、もし私が本当に伸びていれば、何とか*役に立つと想像することができます。多分。 –
アイデアは、それぞれのインスタンスの特性を持つことでした。だから私は値を探しているのではなく、単に型クラスを指定するためのプレースホルダと、結果的にそこで選択したい関数を探しています。 例:class TypeTraits(a :: Type)HType a sizeOf :: Proxy a - > Int' – Chetan