En théorie des langages de programmation, la variance d'un type constructeur indique comment celui-ci transforme les relations d'héritage entre les types[1].
Définition formelle
Dans une théorie des types munie de constructeur de type, soit T et S deux types, et C[A] un type constructeur d'argument A. C[.] est soit[2],[3] :
- covariant : Si
Sest un sous-type deTalorsC[S]est un sous-type deC[T] - contravariant : Si
Sest un sous-type deTalorsC[T]est un sous-type deC[S] - invariant : Quelle que soit la relation d'héritage entre
TetS,C[T]n'est pas un sous-type deC[S]etC[S]n'est pas un sous-type deC[T]. - bivariant : Quelle que soit la relation d'héritage entre
TetS,C[S]est un sous-type deC[T]. - variant :
C[.]est covariant, contravariant ou bivariant.
Étymologie et lien avec la théorie des catégories
On définit une catégorie dont les objets sont les types et les morphismes sont les relations d'héritage entre les types[1].
est bien une catégorie : tout type est son propre sous-type, donc il existe un morphisme identité associé à chaque objet. De plus, l'associativité est assurée car il existe au plus un morphisme entre deux objets[1].
Les foncteurs dans correspondent alors aux types constructeurs, le vocabulaire foncteur covariant et contravariant explique que ce vocabulaire s'applique aux types constructeurs[1].
Notes et références
- (en) Antoine Doeraene, « How Type Variance fits into Category Theory », sur Medium, (consulté le )
- ↑ (en) 262588213843476, « Description of the four kinds of variance: covariance, contravariance, invariance and bivariance. », sur Gist (consulté le )
- ↑ (en) Gulnaz Gurbuz, « Invariance, Covariance and Contravariance : Clear Explanation », sur Medium, (consulté le )
