Несовместимые экземпляры 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? Есть ли другой способ, которым я мог бы удовлетворить требование для подробной операции равенства, кроме дешевого заказа?

Ответы на вопрос(1)

Ваш ответ на вопрос