对Haskell来说是全新的,为什么这个函数会永远循环?

对Haskell来说是全新的,为什么这个函数会永远循环?,haskell,Haskell,背景:我还不到一个星期就明白了哈斯克尔的意思,到目前为止我玩得很开心,但这件事让我很难堪。这似乎是证明我的问题的最简单的例子: 我定义了以下类型 data AnInteger = A Integer instance Eq AnInteger where a == a' = a == a' 但是当我尝试使用它的时候 我得到的似乎是一个无限循环。这里发生了什么我不明白的事 如何更正语法以提供所需的True?您正在定义=运算符,方法是说a等于a'如果a等于a'。从逻辑上讲,这是一个重言式 就

背景:我还不到一个星期就明白了哈斯克尔的意思,到目前为止我玩得很开心,但这件事让我很难堪。这似乎是证明我的问题的最简单的例子:

我定义了以下类型

data AnInteger = A Integer
instance Eq AnInteger where
  a == a' = a == a'
但是当我尝试使用它的时候

我得到的似乎是一个无限循环。这里发生了什么我不明白的事


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

您正在定义
=
运算符,方法是说
a
等于
a'
如果
a
等于
a'
。从逻辑上讲,这是一个重言式

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

您可能要做的是使用
==
比较包在
an整数中的整数,而不是使用
an整数
s本身。要执行此操作,首先需要使用模式匹配将其展开,如下所示:

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

定义
=
运算符时,表示
a
等于
a'
iff
a
等于
a'
。从逻辑上讲,这是一个重言式

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

您可能打算使用
==
来比较
a整数
s中包装的整数,而不是
a整数
s本身。要执行此操作,首先需要使用模式匹配将其展开,如下所示:

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

这就像说
main=main
。您已将相等定义为对其自身的递归调用。以后,请发布图像文本,而不是图像。大多数终端都可以通过某种方式进行剪切和粘贴。包含文本的图像在这里是不受欢迎的,就像说
main=main
。您已将相等定义为对其自身的递归调用。以后,请发布图像文本,而不是图像。大多数终端都可以通过某种方式进行剪切和粘贴。包含文本的图像在此不受欢迎,因此。