gpt4 book ai didi

haskell - 出现歧义 '=='

转载 作者:行者123 更新时间:2023-12-02 10:29:29 24 4
gpt4 key购买 nike

我刚刚学习 Haskell,仍在尝试弄清楚事情是如何工作的。

所以我正在创建一个列表类,它可以容纳 IntChar 的混合。

data Algebra = Empty
| Nmbr Int Algebra
| Smbl Char Algebra

然后我尝试将其设为 Eq 的实例

instance Eq Algebra where
Empty == Empty = True
(Nmbr x xl) == (Nmbr y yl) = (x == y) && (xl==yl)
(Smbl x xl) == (Smbl y yl) = (x == y) && (xl==yl)
_ == _ = False

并且我收到一个Ambigouslyoccurrence==编译错误。它无法区分 Main.==Prelude.== 之间的区别。如果我手动将所有 == 替换为 Main.==Prelude.== 那么它可以正常编译。

我不明白为什么编译器在这里遇到这么大的困难。 xy 在每种情况下都被明确定义为 IntChar。我将我正在做的事情与大量教程示例(例如 http://www.haskell.org/tutorial/classes.html )进行了比较,我无法确定为什么编译器在这种情况下如此 SCSS :P

最佳答案

您需要缩进 instance 的正文定义:

instance Eq Algebra where
Empty == Empty = True
(Nmbr x xl) == (Nmbr y yl) = (x == y) && (xl==yl)
(Smbl x xl) == (Smbl y yl) = (x == y) && (xl==yl)
_ == _ = False

否则编译器会将其视为两件事:

  • instance Eq Algebra具有空主体,生成 a == b = not (a /= b) 的默认定义反之亦然。

  • 名为 == 的新中缀运算符的定义.

然后使用==现在,您的代码中会在 == 之间产生歧义。来自Eq (在 Prelude 中定义)和 ==在您的代码中( Main )。

是的,deriving Eq为您提供了这种结构上的平等。

关于haskell - 出现歧义 '==',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24357333/

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