Los tipos de datos algebraicos (ADT) en Haskell pueden convertirse automáticamente en instancias de algunos tipos de clases (comoShow
,Eq
) derivando de ellos.
data Maybe a = Nothing | Just a
deriving (Eq, Ord)
Mi pregunta es, ¿cómo funciona esto deriving
, es decir, cómo sabe Haskell cómo implementar las funciones de la clase de tipos derivada para el ADT derivado?
Además, ¿por qué está deriving
restringido a determinadas clases de tipos? ¿Por qué no puedo escribir mi propia clase de tipos que pueda derivarse?
fuente
StandaloneDeriving
en el manual de ghc y haskellwikiDel informe Haskell 98:
Aquí está la descripción de cómo derivar estas clases de tipos: http://www.haskell.org/onlinereport/derived.html#derived-appendix
fuente
Es posible utilizar Template Haskell para generar declaraciones de instancia de una manera similar a las cláusulas derivadas.
El siguiente ejemplo fue robado descaradamente de la Wiki de Haskell :
fuente