2013-11-21 72 views
1

海蘭, 我已經定義的數據結構爲自然數,並且希望定義一個Eq實例,看看兩個數字是否相等,但我不斷收到消息: 「曖昧occurence 'Eq',它可以指Main.eq或Prelude.eq「 你能告訴我,我可能做錯了什麼?定義式實例-Haskell

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 

非常感謝!

+1

我相信,你不應該定義自己的'Eq',讓'類方程一個地方(==)::一 - > a - > Bool'是多餘的 –

回答

1

您已經添加了名爲Eq的類的定義,它與Prelude中的定義不同,編譯器抱怨說,當您編寫instance Eq Nat時,它不知道要嘗試實例化哪個類。

您應該從代碼中刪除class Eq a where ...的聲明。

+1

或者,如果你真的想要推出自己的(但只是出於教育原因,沒有理由在真正的代碼中),或者'import prelude hiding(Eq)'。 –