gpt4 book ai didi

haskell - 如何创建提升类型的类型类实例?

转载 作者:行者123 更新时间:2023-12-04 14:49:05 25 4
gpt4 key购买 nike

我有一个通过 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'

最佳答案

问题出在类(class)的主体上;具有提升类型的类型没有任何值,因此您不能拥有将一个作为参数的函数。您必须使用 Proxy a -> String 或类似名称。

顺便说一句,如果你打开 PolyKinds 扩展,那么你应该可以完全省略 kind 注释。 (实际上,您可能必须这样做,以定义您自己的 Proxy 类型,因为我认为来自 Data.Proxy 的可能是 * -> * ,而您需要 Type -> * 。如果您定义 data Proxy p = Proxy 并打开 PolyKinds ,那么它将被推断为AnyK -> *。)

关于haskell - 如何创建提升类型的类型类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com