Hiding the extra tagging

The two-level approach introduces an extra layer of tagging in the data structures. A set of auxiliary constructor functions is used to hide this.

Old version

hsId n                      = Exp $ HsId n
hsLit lit                   = Exp $ HsLit lit
hsApp e1 e2                 = Exp $ HsApp e1 e2
hsLambda pats e             = Exp $ HsLambda pats e
...
(These functions are used in the parser, for example.)