我希望能够覆盖Haskell中记录的Eq和Show的默认定义。例如,假设我想在第一个条目相等的情况下将有序对定义为相等。但是当我写这篇文章时:
data Two = Two {a::Int, b::Int}
instance Eq Two where
x == y = ((a x) == (a y))
哈斯克尔抱怨
Ambiguous occurrence `=='
It could refer to either `TestOverride.==',
defined at TestOverride.hs:15:3
or `Prelude.==',
imported from `Prelude' at TestOverride.hs:7:8-19
(and originally defined in `GHC.Classes')
解决方法是什么?
答案 0 :(得分:6)
你的缩进被打破了。类函数的实现必须在实例关键字的右侧至少缩进一个空格或制表符,因此您的实例应如下所示:
instance Eq Two where
x == y = ((a x) == (a y))
请注意,对于启动" blocks"的其他关键字也是如此。 (例如do
,where
等)。