GADT meet Subtyping
Abstract
While generalized abstract datatypes (GADT) are now considered well-understood, adding them to a language with a notion of subtyping comes with a few surprises. What does it mean for a GADT parameter to be covariant? The answer turns out to be quite subtle. It involves fine-grained properties of the subtyping relation that raise interesting design questions. We allow variance annotations in GADT definitions, study their soundness, and present a sound and complete algorithm to check them. Our work may be applied to real-world ML-like languages with explicit subtyping such as OCaml, or to languages with general subtyping constraints.
Les types algébriques généralisés (\textit{Generalized Algebraic Datatypes}, \GADTs) sont maintenant bien compris, mais leur ajout à un langage équipé de sous-typage nous réservait quelques surprises. Qu'est-ce qu'être covariant pour un paramètre de \GADT? % La réponse s'avère être subtile. Elle met en jeu des propriétés fines de la relation de sous-typage qui soulèvent d'intéressantes problématiques de conception de langage. % Nous permettons des annotations de variance dans les définitions de \GADTs, étudions leur correction, et présentons un algorithme correct et complet pour les vérifier. Notre travail peut s'appliquer à un langage complet inspiré de ML et avec sous-typage explicite, tel que OCaml, ou même à des langages avec des contraintes générales de sous-typage.
Domains
Programming Languages [cs.PL]
Fichier principal
RR-8114.pdf (638.17 Ko)
Télécharger le fichier
slides.pdf (384.89 Ko)
Télécharger le fichier
Origin : Files produced by the author(s)
Format : Other
Loading...