如果我有:
data Container a = Node a | End a | Container a
如果我想编写一个可以查看 Container a 元素列表并执行列表差异的函数,我该怎么做才能明确告诉编译器这个抽象数据类型允许相等?
我以为会是:
compare::Eq (Container a) => Container a -> Container a -> Bool
compare a b
| a == b = True
| a /= b = False
但它抱怨 Eq 语句不正确,因为它无法推断 (Eq (Container a)) 因使用 '=='
编辑它似乎在我的抽象数据类型中派生 (Eq) 是允许这样做的唯一方法。有人可以确认吗?
EDIT2 包括推导 (Eq) 后:
test:: [Container a] -> Container a -> Bool
test list element = elem element list
“没有 (Eq a) 的实例”