------------------------------------
Major increment for Template Haskell
------------------------------------
1. New abstract data type "Name" which appears where String used to be.
E.g. data Exp = VarE Name | ...
2. New syntax 'x and ''T, for quoting Names. It's rather like [| x |]
and [t| T |] respectively, except that
a) it's non-monadic: 'x :: Name
b) you get a Name not an Exp or Type
3. reify is an ordinary function
reify :: Name -> Q Info
New data type Info which tells what TH knows about Name
4. Local variables work properly. So this works now (crashed before):
f x = $( [| x |] )
5. THSyntax is split up into three modules:
Language.Haskell.TH TH "clients" import this
Language.Haskell.TH.THSyntax data type declarations and internal stuff
Language.Haskell.TH.THLib Support library code (all re-exported
by TH), including smart constructors and
pretty printer
6. Error reporting and recovery are in (not yet well tested)
report :: Bool {- True <=> fatal -} -> String -> Q ()
recover :: Q a -> Q a -> Q a
7. Can find current module
currentModule :: Q String
Much other cleaning up, needless to say.