我有这种数据类型,我想为它定义一个相等运算符。Mlist 应该是 Eq 的一个实例。
data Mlist a = Mlist [a]
instance Eq a => Eq (Mlist a) where
(==) :: [a] -> [a] -> Bool
相等运算符应该允许我检查这一点(加上顺序无关紧要):
m1 = Mlist [1,2,3]
m2 = Mlist [3,1,2]
-- then m1 equals m2
m3 = Mlist [3,2,1,5]
-- then m1 not equals m3
上面的代码不起作用,有人可以帮忙吗?
编辑:这是一个新版本,但它不工作......
instance Eq a => Eq (Mlist a) where
(==) :: (Eq a) => [a] -> [a] -> Bool
(==) [] [] = True
(==) [] _ = False
(==) _ [] = False
(==) (hd:tl) b = (==) tl $ delete hd b