我正在尝试为以下数据实现Eq类类型:
data Pair a = Pair a a
instance Eq a => Eq (Pair a) where
(==) (Pair x x) (Pair y y) = (x == y)
我收到以下错误消息:
....中的'y'的定义冲突
我的问题:
y
,为什么x
没有类似的错误?答案 0 :(得分:3)
说正在进行以下通话:
(Pair 1 2) == (Pair 3 4)
此时将将值1分配给x:
(==) (Pair x...
此时x被重新分配给值2,这是不允许的:
(==) (Pair x x...
因此错误
关于你的第二个问题的答案,你应该得到x和y的错误,如下:
Test.hs:6:16:
Conflicting definitions for `x'
Bound at: Test.hs:6:16
Test.hs:6:18
In an equation for `=='
Test.hs:6:27:
Conflicting definitions for `y'
Bound at: Test.hs:6:27
Test.hs:6:29
In an equation for `=='