Structural subtyping and parametric polymorphism provide similar flexibility
and reusability to programmers. For example, both features enable the
programmer to provide a wider record as an argument to a function that expects
a narrower one. However, the means by which they do so differs substantially,
and the precise details of the relationship between them exists, at best, as
folklore in literature.
In this paper, we systematically study the relative expressive power of
structural subtyping and parametric polymorphism. We focus our investigation on
establishing the extent to which parametric polymorphism, in the form of row
and presence polymorphism, can encode structural subtyping for variant and
record types. We base our study on various Church-style λ-calculi
extended with records and variants, different forms of structural subtyping,
and row and presence polymorphism.
We characterise expressiveness by exhibiting compositional translations
between calculi. For each translation we prove a type preservation and
operational correspondence result. We also prove a number of non-existence
results. By imposing restrictions on both source and target types, we reveal
further subtleties in the expressiveness landscape, the restrictions enabling
otherwise impossible translations to be defined. More specifically, we prove
that full subtyping cannot be encoded via polymorphism, but we show that
several restricted forms of subtyping can be encoded via particular forms of
polymorphism.Comment: 47 pages, accepted by OOPSLA 202