如何在Haskell中覆盖Eq,Show in records in Show

hol*_*lee 1 haskell

我希望能够覆盖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)

有什么问题?

Cub*_*bic 6

你的缩进被打破了.类函数的实现必须在实例关键字的右侧至少缩进一个空格或制表符,因此您的实例应如下所示:

instance Eq Two where
  x == y = ((a x) == (a y))
Run Code Online (Sandbox Code Playgroud)

请注意,对于启动"块"(例如do,where等)的其他关键字也是如此.