Haskell全新,为什么这个函数永远循环?

时间:2016-11-20 01:53:30

标签: haskell

背景:我花了不到一个星期的时间来计算Haskell,到目前为止我很开心,但是这个让我很难受。这似乎是演示我的问题的最简单的例子:

我定义了以下类型。

data AnInteger = A Integer
instance Eq AnInteger where
  a == a' = a == a'

但是当我尝试使用它时

Screenshot of ghci infinite looping

我得到的似乎是无限循环。这里发生了什么,我没有得到?

如何更正语法以提供 True 所需的输出?

1 个答案:

答案 0 :(得分:8)

您通过说==等于a iff a'等于a来定义a'运算符。从逻辑上讲,这是一个重言式。

就程序逻辑而言,它是一个无限循环,因为将==函数应用于两个参数将无限地再次应用于那些相同的参数。

您可能要做的是使用==来比较AnInteger中包含的整数,而不是AnInteger s本身。要做到这一点,您首先需要使用模式匹配来解开它们:

(A a) == (A a') = a == a'