繁体   English   中英

如何实现Eq类型类函数:x == y = not(x / = y)x / = y = not(x == y)工作?

[英]How do the implementation of Eq typeclass function: x == y = not (x /= y) x /= y = not (x == y) work?

我正在读这本书 ,它谈到了类型Eq的定义

在Eq中有两个函数==/= ,它们实现为:

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

书中说它们是相互递归的,函数的结果是在另一个函数的项目中。

我不明白的是我在相互递归中没有看到基本情况,我不明白为什么函数会停止并返回结果。

有了这些定义,相互递归就不会停止 - 它会无限地递归。 我们的想法是,在实现Eq类型类时,您可以使用自己的基本情况覆盖两个定义中的一个。

因此,例如,如果您有类型data Foo = Bar | Baz data Foo = Bar | Baz您的Eq实例可能如下所示:

instance Eq Foo where
  Bar == Bar = True
  Baz == Baz = True
  _   == _   = False

这里我们只定义了== ,而不是/= ,所以/=将使用其默认定义not (x == y) 但是我们对==的定义不会调用/= back,所以它不再相互递归并且会终止而没有问题。

Eq==/=提供默认实现的原因是,您可以决定是否要为==/=提供定义,即使您选择/=也可以免费获得另一个定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM