我有一个数据类型,并且想要为它定义相等运算符。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
(==) :: Eq a => Mlist a -> Mlist a -> Bool
,而不是(==) :: (Eq a) => [a] -> [a] -> Bool
。 - nymkData.Set
吗? - luqui