在类型类实现中定义变量时的冲突

时间:2015-10-29 19:45:23

标签: haskell typeclass

我正在尝试为以下数据实现Eq类类型:

data Pair a = Pair a a
instance Eq a => Eq (Pair a) where
    (==) (Pair x x) (Pair y y) = (x == y)

我收到以下错误消息:

  

....中的'y'的定义冲突

我的问题:

  1. 我觉得我正在做“按书”,为什么我会收到这个错误?
  2. 如果我重新定义y,为什么x没有类似的错误?
  3. 上述代码中的“重新定义”在哪里?

1 个答案:

答案 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 `=='