我正在学习Haskell,并试图弄清楚它的工作原理。
因此,我正在创建一个列表类,可以容纳混合的Int
和Char
。
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
并且我遇到了一个“模糊的发生 ==”编译错误。它无法区分
Main.==
和 Prelude.==
之间的区别。如果我手动替换所有 ==
为 Main.==
或者 Prelude.==
那么就可以通过编译。我不明白为什么编译器会有这么大的困难。在每种情况下,
x
和 y
明显被定义为 Int
或 Char
。我已经将我的操作与众多的教程示例(例如 http://www.haskell.org/tutorial/classes.html)进行了比较,但我无法确定为什么编译器在这种情况下会如此地讨厌 :P
deriving Eq
是否尝试做与我这里的代码完全相同的事情?我找不到关于deriving
如何工作的好解释。 - Stephen Douglas Allen