2012-05-02 5 views
6

Me preguntaba acerca de la declaración de instancia Ord para (a,b), y quería hacer una búsqueda rápida en hackage para confirmar mi intuición de que la comparación es primero en a y luego, en caso de igualdad, en b. Específicamente fui here. Como el hackage tiene enlaces al código fuente para las declaraciones y funciones de datos, asumí que también habría un código fuente para las declaraciones de las instancias, pero no puedo encontrarlas. ¿Hay alguna razón por la que no están allí, o simplemente no he mirado lo suficiente? type Answer = Either Explanation Directions :)Código fuente para declaraciones de instancia de clase de clase estándar

+3

Hay un boleto abierto para [agregar enlaces de origen para instancias] (http://trac.haskell.org/haddock/ticket/145) en Haddock, lo que facilitaría la búsqueda de instancias. – hammar

+0

Muchas gracias. Todas las buenas respuestas, cada una con un poco de información extra que las hace destacar de las demás. – Boris

Respuesta

4

El Ord ejemplo para tuplas is derived, de acuerdo con las reglas de la especificación del lenguaje, que se remonta as far as Gofer.

instance (Eq a, Eq b) => Eq (a,b) where 
    (x,y) == (u,v) = x==u && y==v 

instance (Ord a, Ord b) => Ord (a,b) where 
    (x,y) <= (u,v) = x<u || (x==u && y<=v) 
4

El Informe Haskell 98 especifica esta in section 10.1:

Los métodos de la clase introducidos automáticamente por los casos derivados de la ecuación y Ord son (==), (/ =), comparar (<) , (< =), (>), (> =), max y min. Los últimos siete operadores se definen para comparar sus argumentos lexicográficamente con respecto al conjunto de constructores proporcionado, con constructores anteriores en la declaración de tipo de datos contando como más pequeños que los posteriores.

Las comparaciones derivadas siempre atraviesan los constructores de izquierda a derecha.

...

Todas las operaciones derivadas de la clase Eq y Ord son estrictos en ambos argumentos.

Cuestiones relacionadas