我希望能够覆盖Haskell中记录的Eq和Show的默认定义.例如,假设我想在第一个条目相等的情况下将有序对定义为相等.但是当我写这个:
data Two = Two {a::Int, b::Int}
instance Eq Two where
x == y = ((a x) == (a y))
Run Code Online (Sandbox Code Playgroud)
哈斯克尔抱怨道
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')
Run Code Online (Sandbox Code Playgroud)
有什么问题?
你的缩进被打破了.类函数的实现必须在实例关键字的右侧至少缩进一个空格或制表符,因此您的实例应如下所示:
instance Eq Two where
x == y = ((a x) == (a y))
Run Code Online (Sandbox Code Playgroud)
请注意,对于启动"块"(例如do,where等)的其他关键字也是如此.