繁体   English   中英

定义 EQ 实例

[英]Define EQ Instance

我正在尝试创建一个 Eq 实例,但在创建它时遇到了一些问题。

我有以下数据定义:

data Link = G | S | P deriving (Eq, Show)
data Chain = Empty | Join Link Chain

现在我想将 Chain 转换为 Eq 实例(相同时为真)。

这是我当前的实例:

instance Eq Chain where
(Join a b) == (Join c d) = (a == c) && (b == d)
Empty      == Empty      = True
_          == _          = False

它将(a == c) && (b == d)标记为错误(歧义出现 '==')

我不确定这是为什么,如果有人能帮助我,我将不胜感激。

先感谢您!

您未能缩进方法定义。

instance Eq Chain where
↓↓
  Join a b == Join c d = a==c && b==d
  Empty    == Empty    = True
  _        == _        = False
↑↑

...或者,但强烈不推荐,将它们放在大括号中

instance Eq Chain where {
Join a b == Join c d = a==c && b==d;
Empty    == Empty    = True;
_        == _        = False
}

如果没有缩进或大括号,您的代码所做的就是声明一个Eq实例和一个单独的、全新的运算符,恰好也称为== 即,您实际上是这样写的:

module Ch where

instance Eq Chain where
  -- missing definitions of `Prelude.==` here

(Ch.==) :: Chain -> Chain -> Bool
Join a b Ch.== Join c d = a==c && b==d
Empty    Ch.== Empty    = True
_        Ch.== _        = False

编译器错误告诉您a==cb==d定义现在不明确:这是指Prelude.==还是Ch.==

暂无
暂无

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

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