We report on an extension of Haskell with open type-level functions and equality constraints that unifies earlier work on GADTs, functional dependencies, and associated types. The contribution of the paper is that we identify and characterise the key technical challenge of entailment checking; and we give a novel, decidable, sound, and complete algorithm to solve it, together with some practically-important variants. Our system is implemented in GHC, and is already in active use. Categories and Subject Descriptors D.3.2 [Programming Languages]: Language Classifications--Functional Languages; F.3.3 [Logics and Meanings of Programs]: Studies of Program Constructs-Type Structure General Terms Algorithms, Languages Keywords Haskell, type checking, type functions, type families
Tom Schrijvers, Simon L. Peyton Jones, Manuel M. T