@inproceedings{a425f7d8d44141b7927305106f64f984,
title = "Restrictable Variants: A Simple and Practical Alternative to Extensible Variants",
abstract = "We propose restrictable variants as a simple and practical alternative to extensible variants. Restrictable variants combine nominal and structural typing: a restrictable variant is an algebraic data type indexed by a type-level set formula that captures its set of active labels. We introduce new pattern-matching constructs that allows programmers to write functions that only match on a subset of variants, i.e., pattern-matches may be non-exhaustive. We then present a type system for restrictable variants which ensures that such non-exhaustive matches cannot get stuck at runtime. An essential feature of restrictable variants is that the type system can capture structure-preserving transformations: specifically the introduction and elimination of variants. This property is important for writing reusable functions, yet many row-based extensible variant systems lack it. In this paper, we present a calculus with restrictable variants, two partial pattern-matching constructs, and a type system that ensures progress and preservation. The type system extends Hindley-Milner with restrictable variants and supports type inference with an extension of Algorithm W with Boolean unification. We implement restrictable variants as an extension of the Flix programming language and conduct a few case studies to illustrate their practical usefulness.",
keywords = "Boolean unification, extensible variants, refinement types, restrictable variants",
author = "Magnus Madsen and Starup, {Jonathan Lindegaard} and Matthew Lutze",
note = "Publisher Copyright: {\textcopyright} Magnus Madsen, Jonathan Lindegaard Starup, and Matthew Lutze;; 37th European Conference on Object-Oriented Programming, ECOOP 2023 ; Conference date: 17-07-2023 Through 21-07-2023",
year = "2023",
month = jul,
doi = "10.4230/LIPIcs.ECOOP.2023.17",
language = "English",
series = "Leibniz International Proceedings in Informatics, LIPIcs",
publisher = "Dagstuhl Publishing",
pages = "17:1--17:27",
editor = "Karim Ali and Guido Salvaneschi",
booktitle = "37th European Conference on Object-Oriented Programming, ECOOP 2023",
}