Les types de données algébriques (ADT) dans Haskell peuvent automatiquement devenir des instances de certaines classes de types (commeShow
,Eq
) en dérivant d'eux.
data Maybe a = Nothing | Just a
deriving (Eq, Ord)
Ma question est la suivante: comment cela deriving
fonctionne-t-il, c'est-à-dire comment Haskell sait comment implémenter les fonctions de la classe de types dérivée pour l'ADT dérivé?
Aussi, pourquoi est-il deriving
limité à certaines classes de types uniquement? Pourquoi ne puis-je pas écrire ma propre classe de types qui peut être dérivée?
la source
StandaloneDeriving
dans le manuel ghc et haskellwikiD'après le rapport Haskell 98:
Voici la description de la façon de dériver ces classes de types: http://www.haskell.org/onlinereport/derived.html#derived-appendix
la source
Il est possible d'utiliser Template Haskell pour générer des déclarations d'instance de la même manière que les clauses dérivantes.
L'exemple suivant est volé sans vergogne dans le Wiki Haskell :
la source