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

时间:2014-08-02 13:08:30

标签: haskell

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

解决方法是什么?

1 个答案:

答案 0 :(得分:6)

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

instance Eq Two where
  x == y = ((a x) == (a y))

请注意,对于启动" blocks"的其他关键字也是如此。 (例如dowhere等)。