我正在尝试制作一些数据结构来解决图形难题。我正在尝试定义边缘的比较标准,但我不确定如何定义。迄今为止:
data Edge = Edge (Set String) 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
需要==
or /=
, and Ord
需要<=
or compare
。 (要了解哪些功能是必需的,哪些是可选的,您可以查看文档。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)