gpt4 book ai didi

haskell - 为数据类型定义自己的 Ord

转载 作者:行者123 更新时间:2023-12-02 11:53:40 25 4
gpt4 key购买 nike

我正在尝试创建一些数据结构来解决图形难题。我正在尝试定义边缘的比较标准,但我不确定如何定义。到目前为止:

data Edge = Edge (Set String) Bool

如何“通知”编译器,如果边缘具有相同的字符串集,并且相等性与 bool 值没有任何关系,则我希望边缘被声明为相等?

最佳答案

虽然我不确定为什么你想忽略 bool 值(我很好奇),但要做到这一点,你必须定义自己的 Eq实例;默认值不起作用,因为它会比较每个字段。幸运的是,这很容易:

instance Eq Edge where
(Edge s1 _) == (Edge s2 _) = s1 == s2

如果您希望能够对边进行排序,并且希望排序也只比较集合,那么您的实现非常相似:

instance Ord Edge where
(Edge s1 _) `compare` (Edge s2 _) = s1 `compare` s2

每个类型类都定义了一组需要实现的方法; Eq需要==/= ,和Ord需要<=compare 。 (要了解哪些功能是必需的,哪些是可选的,您可以查看文档。)

关于haskell - 为数据类型定义自己的 Ord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3065954/

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