【发布时间】:2015-11-15 17:53:58
【问题描述】:
恐怕我严重误解了 Haskell 中的类型。我会进入它。假设我定义了一个类型:
type Vector = [Num a]
所以我在同义词的定义中使用了一个类型类。然后,如果我想将它添加到另一个类型类,比如 Eq,也许我会这样做:
instance Eq Vector a where
[] == [] = True
[_]== [] = False
[] == [_] = False
(a : u) == (b : v) = (a == b) && (u == v)
但是当我这样做时,GHC 给出了一个
输入'['解析错误
它指的是[_]== [] = False行中的第一个左括号。
这是由我的类型定义问题引起的吗?
【问题讨论】:
-
您复制到问题中的内容是否有错字或遗漏?我不相信你有
type Vector = [Num a],因为类型变量a不存在。如果你这样做了,Num类型是什么?它不能是基类中的Num类,因为这是一个约束,而不是一个类型。 -
如果
Vector a是一个定义为列表[F a]的类型同义词,你为什么要为它编写一个Eq实例?Eq a => Eq [a]已经有一个Eq实例。 -
@AndreyChernyakhovskiy 我的 7.10 GHCi 对象
type Vector a = [Num a]出现错误Expected kind '*', but 'Num a' has kind 'Constraint',即使启用了PolyKinds和DataKinds也不足为奇。 -
@Cirdec,我的是 7.6.3。看起来已经修复了一个错误。
-
顺便说一句,如果我没记错的话,不能在类型同义词上定义类型类的实例。