Ответ 1
Хотя я не уверен, почему вы хотите игнорировать логическое значение (мне любопытно), для этого вам нужно будет определить свой собственный экземпляр 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
. (Чтобы узнать, какие функции требуются и которые являются необязательными, вы можете проверить документы.)