Algunos anillos pueden estar equipados con una función de norma:Haskell restricción es no menor que la cabeza ejemplo
class (Ring.C a) => EuclideanDomain a where
norm :: a -> Integer
Con esta función, el anillo puede ser ordenado en la manera obvia:
compare x y = compare (norm x) (norm y)
Pero no estoy seguro de cómo indicar esto. He intentado hacer
instance (EuclideanDomain a, Eq a) => Ord a where
pero esto me da algunas advertencias, y cuando activo las opciones del compilador pertinentes me dice "restricción no es menor que la cabeza instancia" - si habilito UndecidableInstances todo va al infierno.
¿Hay alguna manera de hacer lo que quiero?
¿Qué significa que las restricciones sean más pequeñas? Seguramente hay menos 'EuclideanDomain a's luego hay 'a's? – Xodarap
@ Xodarap: Más pequeño que en "envuelto en menos tipos de constructores", no como en "menos valores de este tipo". – hammar
Ya veo. Cuando intento lo que pones aquí y luego 'f :: EuclideanDomain a => a -> Ordering ',' f x = compare x x' no compila. ¿Qué me estoy perdiendo? – Xodarap