gpt4 book ai didi

haskell - Eq typeclass函数: x == y = not (x/= y) x/= y = not (x == y) work?怎么实现

转载 作者:行者123 更新时间:2023-12-04 23:55:20 24 4
gpt4 key购买 nike

我正在阅读 book , 并讲了 typeclass Eq 的定义

有两个功能== , /=在等式中,它们被实现为:

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

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

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

最佳答案

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

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

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

这里我们只定义了 == ,不是 /= , 所以 /=将使用其默认定义 not (x == y) .然而我们对 == 的定义不会打电话 /=返回,因此它不再相互递归,并且将毫无问题地终止。

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

关于haskell - Eq typeclass函数: x == y = not (x/= y) x/= y = not (x == y) work?怎么实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17318320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com