HY,
我已经为自然数定义了一个数据结构,并希望定义一个Eq
实例,以查看两个数字是否相等,但我不断收到消息:
“'Eq'的模糊出现。它可以指Main.eq或Prelude.eq”
你能告诉我,我可能做错了吗?
data Nat = Z | S Nat deriving Show
class Eq a where
(==) :: a -> a -> Bool
instance Eq Nat where
Z == Z = True
(S x) == (S y) = x == y
x == y = False
非常感谢!
答案 0 :(得分:3)
Haskell的Prelude(类似于标准库)定义了一个Eq类。您遇到的问题是Haskell不知道'Eq'是指您定义的类还是Haskell内置的类。
考虑重命名你的课程。
有关Haskell Prelude及其Eq的更多信息,请点击此处: http://hackage.haskell.org/package/base-4.6.0.1/docs/Prelude.html#t:Eq
答案 1 :(得分:1)
您添加了一个名为Eq
的类的定义,该类与Prelude中的定义不同,并且编译器抱怨它在您写{{{{{{{{{{ 1}}。
您应该从代码中删除instance Eq Nat
的声明。