Несовместимые экземпляры Eq и Ord?
У меня есть большая программа на Haskell, которая работает очень медленно. Профилирование и тестирование показали, что большая часть времени тратится на сравнение равенства и упорядочения определенного большого типа данных, что очень важно. Равенство - это полезная операция (это поиск в пространстве состояний, а поиск в графике гораздо предпочтительнее поиска в дереве), но мне нужен только экземпляр Ord для этого класса, чтобы использовать Maps. Итак, что я хочу сделать, это сказать
instance Eq BigThing where
(==) b b' = name b == name b' &&
firstPart b == firstPart b' &&
secondPart b == secondPart b' &&
{- ...and so on... -}
instance Ord BigThing where
compare b b' = compare (name b) (name b')
Но так как имена не всегда могут быть разными для разных объектов, возникает риск любопытного случая, когда два BigThings могут быть неравны в соответствии с ==, но сравнение их приводит к EQ.
Будет ли это вызывать проблемы с библиотеками на Haskell? Есть ли другой способ, которым я мог бы удовлетворить требование для подробной операции равенства, кроме дешевого заказа?