ACM SIGPLAN Notices - Haskell '15
Author's Final Manuscript
Haskell, as implemented by the Glasgow Haskell Compiler (GHC), allows expressive type-level programming. The most popular type- level programming extension is TypeFamilies, which allows users to write functions on types. Yet, using type functions can cripple type inference in certain situations. In particular, lack of injectivity in type functions means that GHC can never infer an instantiation of a type variable appearing only under type functions.
In this paper, we describe a small modification to GHC that allows type functions to be annotated as injective. GHC naturally must check validity of the injectivity annotations. The algorithm to do so is surprisingly subtle. We prove soundness for a simplification of our algorithm, and state and prove a completeness property, though the algorithm is not fully complete.
As much of our reasoning surrounds functions defined by a simple pattern-matching structure, we believe our results extend beyond just Haskell. We have implemented our solution on a branch of GHC and plan to make it available to regular users with the next stable release of the compiler.
© ACM, 2015. This is the author's version of the work. It is posted here by permission of ACM for your personal use. Not for redistribution. The definitive version was published in ACM SIGPLAN Notices - Haskell '15, Volume 50, Issue 12 (December 2015) http://doi.acm.org/10.1145/2887747.2804314http://doi.acm.org/10.1145/2887747.2804314
Jan Stolarek, Simon Petyon Jones, and Richard A. Eisenberg, "Injective Type Families for Haskell," ACM SIGPLAN Notices - Haskell '15 50.12 (2015): 118-128.