定义Eq实例-Haskell

时间:2013-11-21 22:03:13

标签: haskell

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

非常感谢!

2 个答案:

答案 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的声明。