2

我正在学习 Haskell,并且得到了以下任务 - 我有一个由两种混合数据类型组成的新类型,我必须在不使用派生的情况下将其设为 Eq 的实例。这是我所拥有的:

data Number = One | Two | Three deriving Eq
data Character = A | B | C deriving Eq
newtype Combo = Combo ((Character, Character),(Number, Number))

instance Eq Combo where
    Combo ((a1, a2),(x1,x2)) == Combo ((b1, b2),(y1, y2)) = (a1 == b1) && (a2 == b2) && (x1 == y1) && (x2 == y2)

然而,拥抱就是一切

ERROR "testing.hs":5 - Ambiguous class occurrence "Eq"
*** Could refer to: Hugs.Prelude.Eq Main.Eq Main.Eq Main.Eq Main.Eq Main.Eq 

我该如何解决?我也不能真正导入 Eq 隐藏的东西,因为我需要它来检查 Number 或 Character 的给定成员是否相等。

4

1 回答 1

3

改变

instance Eq Combo where
Combo ((a1, a2),(x1,x2)) == Combo ((b1, b2),(y1, y2)) = (a1 == b1) && (a2 == b2) && (x1 == y1) && (x2 == y2)

instance Main.Eq Combo where
Combo ((a1, a2),(x1,x2)) == Combo ((b1, b2),(y1, y2)) = (a1 == b1) && (a2 == b2) && (x1 == y1) && (x2 == y2)

显然修复了这个错误。

于 2015-11-18T16:20:20.373 回答