背景:我花了不到一个星期的时间来计算Haskell,到目前为止我很开心,但是这个让我很难受。这似乎是演示我的问题的最简单的例子:
我定义了以下类型。
data AnInteger = A Integer
instance Eq AnInteger where
a == a' = a == a'
但是当我尝试使用它时
我得到的似乎是无限循环。这里发生了什么,我没有得到?
如何更正语法以提供 True 所需的输出?
答案 0 :(得分:8)
您通过说==
等于a
iff a'
等于a
来定义a'
运算符。从逻辑上讲,这是一个重言式。
就程序逻辑而言,它是一个无限循环,因为将==
函数应用于两个参数将无限地再次应用于那些相同的参数。
您可能要做的是使用==
来比较AnInteger
中包含的整数,而不是AnInteger
s本身。要做到这一点,您首先需要使用模式匹配来解开它们:
(A a) == (A a') = a == a'