Некоторые кольца могут быть оснащены нормированной функцией:
class (Ring.C a) => EuclideanDomain a where
norm :: a -> Integer
С помощью этой функции кольцо можно упорядочить очевидным образом:
compare x y = compare (norm x) (norm y)
Но я не уверен, как это указать. Я пытался сделать
instance (EuclideanDomain a, Eq a) => Ord a where
но это дает мне некоторые предупреждения, и когда я включаю соответствующие флаги компилятора, он говорит мне: "Ограничение не меньше, чем глава экземпляра" - если я включаю UndecidableInstances, все идет в ад.
Есть ли способ сделать то, что я хочу?