
TL;DR
This paper explores three methods for implementing extensible variants in Haskell, comparing their expressiveness, and proposing a mechanism to reduce type annotation requirements.
Contribution
It introduces encodings of extensible variants using instance chains and closed type families, and proposes a mechanism to eliminate explicit type annotations.
Findings
All systems are typable with explicit annotations.
Type family encoding retains more constraints in principal types.
Proposed mechanism reduces need for type annotations.
Abstract
Extensible variants improve the modularity and expressiveness of programming languages: they allow program functionality to be decomposed into independent blocks, and allow seamless extension of existing code with both new cases of existing data types and new operations over those data types. This paper considers three approaches to providing extensible variants in Haskell. Row typing is a long understood mechanism for typing extensible records and variants, but its adoption would require extension of Haskell's core type system. Alternatively, we might hope to encode extensible variants in terms of existing mechanisms, such as type classes. We describe an encoding of extensible variants using instance chains, a proposed extension of the class system. Unlike many previous encodings of extensible variants, ours does not require the definition of a new type class for each function that…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
