 An important application of GADTs is to embed higher-order abstract syntax in a type safe fashion.Here is an embedding of the simply typed lambda calculus with an arbitrary collection of base types, tuples and a fixed point combinator