Deriving Via, or, How to Turn Hand-Written Instances into an Anti-Pattern
Baldur Blöndal, Andres Löh, Ryan Scott

Haskell’s deriving construct is a cheap and cheerful way to quickly generate instances of type classes that follow common patterns. But at present, there are only a subset of such type class patterns that deriving supports, and if a particular class lies outside of this subset, then one cannot derive it at all, with no alternative except for laboriously declaring the instances by hand.

To overcome this deficit, we introduce Deriving Via, an extension to deriving that enables programmers to compose instances from named programming patterns, thereby turning deriving into a high-level domain-specific language for defining instances. Deriving Via leverages newtypes – an already familiar tool of the Haskell trade – to declare recurring patterns in a way that both feels natural and allows a high degree of abstraction.

Download / Links
Paper, submitted to Haskell 2018
Nix expression for building patched GHC
GHC branch implementing DerivingVia

Valid XHTML 1.0! Valid CSS!

Andres Löh, 2018-04-07