[Haskell-cafe] Typechecker to GADT: the full implementation of a typed DSL