Haskell Eq定义实现结果

时间:2013-01-08 22:10:05

标签: haskell typeclass

我正在阅读数据库中Eq类型类的定义,我很困惑。在什么时候它意识到两个值相等或不相等。从我看来,看起来他们只是无限地互相称呼。

它定义如下:

class  Eq a  where
    (==), (/=)           :: a -> a -> Bool

    x /= y               = not (x == y)
    x == y               = not (x /= y)

有人会介意解释它实现Bool值的位置吗?他们甚至互相打电话,还是其他事情发生了?

1 个答案:

答案 0 :(得分:11)

这是这些方法的默认实现,是的,它是循环的。如果你按原样使用它们,你将循环:

data Foo = Foo
instance Eq Foo
> Foo == Foo
^CInterrupted

存在循环定义,因此您可以免费实施(==)并获取(/=),反之亦然:

data Foo = Foo
instance Eq Foo where
  x == y = True
> Foo /= Foo
False

另请参阅Ord类,该类解释了特定情况下最小完整定义的内容。