La mejor manera sería simplemente agregar deriving (Eq, Ord)
a la definición del tipo.
Como ha enumerado sus constructores en orden ascendente, la instancia Ord
derivada le dará exactamente el orden que desee.
Sin embargo, si cambiar el orden en la definición no es una opción por alguna razón, aún puede derivar Eq, ya que para eso el orden no importa. Dada una instancia de Eq, podemos escribir manualmente una instancia para Ord. La forma más breve de definir la comparación sería, probablemente, deletrear todas las combinaciones para las cuales compare debería devolver LT y luego simplemente usar compare x y | x == y = Eq; compare _ _ = GT para las combinaciones restantes.
Gracias, yo no sabía que la orden se conserva. – LennyStackOverflow
Pregunta de bonificación: ¿qué pasa si el orden en la definición no refleja el orden numérico? – LennyStackOverflow
@Lenny: Entonces tendría instanciar Ord y definir 'compare' a mano (asumiendo que cambiar el orden en la definición no es una opción por alguna razón) - aún puede derivar Eq aunque para eso el orden no importa . La forma más concisa de definir 'comparar' probablemente sería deletrear todas las combinaciones para las cuales comparar debería devolver LT y luego simplemente usar 'comparar x y | x == y = Eq; compare _ _ = GT' para las combinaciones restantes. – sepp2k