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
Respuesta
Fui looking in the Prelude, hace clic en el source link for the Ord
typeclass, enrollado un poco, y encontraron que se define como
deriving instance (Ord a, Ord b) => Ord (a, b)
Se trata de utilizar la extensión StandaloneDeriving. Básicamente se trata de generar el mismo código que si el tipo se definió como
data (a, b) = (a, b) deriving Ord
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)
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.
- 1. Escriba palabra clave en clase y declaraciones de instancia
- 2. RankNTypes para declaraciones de instancia?
- 3. clase clase: métodos instancia vs. clase
- 4. variables de instancia de clase python y variables de clase
- 5. Declarar una instancia de una clase dentro de esa clase
- 6. crear instancia de clase dinámica
- 7. Mapa de Java, clave = clase, valor = instancia de esa clase
- 8. Obtener instancia de clase por nombre de clase cadena
- 9. Cambio instancia de clase dentro de un método de instancia
- 10. Llegar a clase variable de instancia de clase en CoffeeScript
- 11. clase Rubí tipos de casos y declaraciones
- 12. ¿Cómo se organiza el código fuente de clase en Java?
- 13. instancia de clase de PHP a JSON
- 14. Crear instancia de clase derivada de una instancia de clase base sin conocer los miembros de la clase
- 15. V8 FunctionTemplate Clase Instancia
- 16. Instancia de clase de elevación en Haskell
- 17. ¿Cómo puedo crear una nueva instancia de clase de una clase dentro de una clase (estática)?
- 18. instancia codeigniter de la clase de modelo
- 19. Miembros estáticos de una clase de instancia
- 20. Plantilla estándar Clase de cadena: string.fill()
- 21. Archivo de registro único para cada instancia de la clase
- 22. lista de Python para almacenar la instancia de clase?
- 23. php/phpDoc - @return instancia de $ esta clase?
- 24. fuente de Android construcción: clase duplicado
- 25. Creando una instancia de la clase interna
- 26. instancia global de una clase en C++
- 27. 28 bytes para instancia de objeto/clase vacía?
- 28. declarar una instancia de una clase const
- 29. ¿Puede una instancia de clase autodestruirse?
- 30. Creando una instancia de una clase con()
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
Muchas gracias. Todas las buenas respuestas, cada una con un poco de información extra que las hace destacar de las demás. – Boris