Generalized algebraic data types (GADTs), sometimes known as "guarded recursive data types" or "first-class phantom types", are a simple but powerful generalization of the data types of Haskell and ML. Recent works have given compelling examples of the utility of GADTs, although type inference is known to be difficult. Our contribution is to show how to exploit programmer-supplied type annotations to make the type inference task almost embarrassingly easy. Our main technical innovation is wobbly types, which express in a declarative way the uncertainty caused by the incremental nature of typical type-inference algorithms. Categories and Subject Descriptors D.3.3 [PROGRAMMING S]: Language Constructs and Features--abstract data types, polymorphism General Terms Languages, Theory Keywords generalized algebraic data types, type inference
Simon L. Peyton Jones, Dimitrios Vytiniotis, Steph