Dependent types in Haskell: Theory and practice
Haskell, as implemented in the Glasgow Haskell Compiler (GHC), has been adding new type-level programming features for some time. Many of these features—generalized algebraic datatypes (GADTs), type families, kind polymorphism, and promoted datatypes—have brought Haskell to the doorstep of dependent types. Many dependently typed programs can even currently be encoded, but often the constructions are painful. In this dissertation, I describe Dependent Haskell, which supports full dependent types via a backward-compatible extension to today's Haskell. An important contribution of this work is an implementation, in GHC, of a portion of Dependent Haskell, with the rest to follow. The features I have implemented are already released, in GHC 8.0. This dissertation contains several practical examples of Dependent Haskell code, a full description of the differences between Dependent Haskell and today's Haskell, a novel dependently typed lambda-calculus (called PICO) suitable for use as an intermediate language for compiling Dependent Haskell, and a type inference and elaboration algorithm, BAKE, that translates Dependent Haskell to type-correct PICO. Full proofs of type safety of PICO and the soundness of BAKE are included in the appendix.
Eisenberg, Richard A, "Dependent types in Haskell: Theory and practice" (2016). Dissertations available from ProQuest. AAI10244979.