[project @ 2003-11-06 17:09:50 by simonpj]
authorsimonpj <unknown>
Thu, 6 Nov 2003 17:10:01 +0000 (17:10 +0000)
committersimonpj <unknown>
Thu, 6 Nov 2003 17:10:01 +0000 (17:10 +0000)
------------------------------------
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.


No differences found