gpt4 book ai didi

haskell - 如何在 Haskell 中为类创建相等运算符?

转载 作者:行者123 更新时间:2023-12-02 21:08:25 24 4
gpt4 key购买 nike

我有这个数据类型,我想为其定义一个相等运算符。 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

最佳答案

要使 Mlist 成为 Eq 的实例,您必须定义其中一个

(==) :: Mlist a -> Mlist a -> Bool

(/=) :: Mlist a -> Mlist a -> Bool

本质上,您需要实现一个可以确定两个列表是否相等的函数。由于 Eq 是唯一的约束,因此您可以使用 Data.List.\\ 的帮助。 。例如:

instance Eq a => Eq (Mlist a) where
Mlist xs == Mlist ys = length xs == length ys && null (xs \\ ys)

关于haskell - 如何在 Haskell 中为类创建相等运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15319508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com