OK, I've committed the new TH stuff. There is still more to do, but lots of stuff works that didn't before (summarised below). One thing that's a bit "off" at the moment is that I'm using the type checker's own monad to generate uniques for TH. As a result, if you print out the TH-generated code, you get stuff like data TH_reifyDecl1.R a_1627393116 = TH_reifyDecl1.C a_1627393116 Now there's nothing wrong with this, but it might make sense for the pretty-printer (now in THLib) to clean it up. I'm hoping that Ian or someone will do that task -- it's quite clearly separated. Meanwhile, please do beat on this new stuff. It's really a big step forward I think. Simon -----Original Message----- From: cvs-all-bounces@haskell.org [mailto:cvs-all-bounces@haskell.org] On Behalf Of Simon Peyton Jones Sent: 06 November 2003 17:10 To: cvs-ghc@haskell.org; cvs-fptools@haskell.org; cvs-libraries@haskell.org Subject: cvs commit: fptools/ghc/compiler/basicTypes Name.lhs OccName.lhs RdrName.lhs UniqSupply.lhs Unique.lhs Var.lhs fptools/ghc/compiler/deSugar DsExpr.lhs DsForeign.lhs DsMeta.hs DsMonad.lhs fptools/ghc/compiler/hsSyn Convert.lhs HsExpr.lhs ... simonpj 2003/11/06 09:10:01 PST Modified files: ghc/compiler/basicTypes Name.lhs OccName.lhs RdrName.lhs UniqSupply.lhs Unique.lhs Var.lhs ghc/compiler/deSugar DsExpr.lhs DsForeign.lhs DsMeta.hs DsMonad.lhs ghc/compiler/hsSyn Convert.lhs HsExpr.lhs ghc/compiler/iface LoadIface.lhs ghc/compiler/main ErrUtils.lhs ghc/compiler/parser Lexer.x Parser.y ghc/compiler/prelude PrelNames.lhs ghc/compiler/rename RnEnv.lhs RnExpr.lhs RnSource.lhs ghc/compiler/typecheck TcClassDcl.lhs TcExpr.lhs TcHsSyn.lhs TcHsType.lhs TcRnDriver.lhs TcRnMonad.lhs TcSplice.lhs TcUnify.lhs ghc/compiler/utils UniqFM.lhs testsuite/tests/ghc-regress/th TH_bracket3.hs TH_reifyDecl1.hs TH_reifyType1.hs TH_reifyType2.hs TH_repE1.hs TH_repE2.hs TH_repE3.hs TH_repPrim.hs TH_repPrim.stderr TH_repPrimOutput.hs TH_spliceDecl1.hs TH_spliceDecl2.hs TH_spliceDecl3.hs TH_spliceDecl3_Lib.hs TH_spliceE3.hs TH_spliceExpr1.hs all.T libraries/haskell-src Makefile Added files: testsuite/tests/ghc-regress/th TH_reifyDecl1.stderr TH_spliceE1.hs TH_spliceE1.stdout libraries/haskell-src/Language/Haskell TH.hs libraries/haskell-src/Language/Haskell/TH THLib.hs THSyntax.hs Removed files: testsuite/tests/ghc-regress/th TH_reifyDecl2.hs TH_reifyDecl3.hs TH_reifyDecl4.hs libraries/haskell-src/Language/Haskell THSyntax.hs Log: ------------------------------------ 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. Revision Changes Path 1.107 +1 -1 fptools/ghc/compiler/basicTypes/Name.lhs 1.56 +10 -4 fptools/ghc/compiler/basicTypes/OccName.lhs 1.26 +3 -3 fptools/ghc/compiler/basicTypes/RdrName.lhs 1.32 +2 -2 fptools/ghc/compiler/basicTypes/UniqSupply.lhs 1.69 +11 -8 fptools/ghc/compiler/basicTypes/Unique.lhs 1.33 +8 -8 fptools/ghc/compiler/basicTypes/Var.lhs 1.103 +1 -2 fptools/ghc/compiler/deSugar/DsExpr.lhs 1.81 +2 -2 fptools/ghc/compiler/deSugar/DsForeign.lhs 1.48 +318 -296 fptools/ghc/compiler/deSugar/DsMeta.hs 1.51 +4 -2 fptools/ghc/compiler/deSugar/DsMonad.lhs 1.41 +79 -74 fptools/ghc/compiler/hsSyn/Convert.lhs 1.88 +0 -19 fptools/ghc/compiler/hsSyn/HsExpr.lhs 1.5 +1 -1 fptools/ghc/compiler/iface/LoadIface.lhs 1.42 +2 -10 fptools/ghc/compiler/main/ErrUtils.lhs 1.15 +61 -31 fptools/ghc/compiler/parser/Lexer.x 1.129 +9 -13 fptools/ghc/compiler/parser/Parser.y 1.83 +0 -3 fptools/ghc/compiler/prelude/PrelNames.lhs 1.171 +18 -22 fptools/ghc/compiler/rename/RnEnv.lhs 1.125 +2 -6 fptools/ghc/compiler/rename/RnExpr.lhs 1.162 +3 -0 fptools/ghc/compiler/rename/RnSource.lhs 1.137 +1 -1 fptools/ghc/compiler/typecheck/TcClassDcl.lhs 1.161 +0 -12 fptools/ghc/compiler/typecheck/TcExpr.lhs 1.94 +0 -2 fptools/ghc/compiler/typecheck/TcHsSyn.lhs 1.7 +1 -3 fptools/ghc/compiler/typecheck/TcHsType.lhs 1.53 +1 -0 fptools/ghc/compiler/typecheck/TcRnDriver.lhs 1.28 +5 -2 fptools/ghc/compiler/typecheck/TcRnMonad.lhs 1.28 +232 -120 fptools/ghc/compiler/typecheck/TcSplice.lhs 1.52 +1 -1 fptools/ghc/compiler/typecheck/TcUnify.lhs 1.37 +16 -16 fptools/ghc/compiler/utils/UniqFM.lhs 1.2 +1 -0 fptools/testsuite/tests/ghc-regress/th/TH_bracket3.hs 1.4 +30 -14 fptools/testsuite/tests/ghc-regress/th/TH_reifyDecl1.hs 1.4 +3 -3 fptools/testsuite/tests/ghc-regress/th/TH_reifyType1.hs 1.4 +3 -3 fptools/testsuite/tests/ghc-regress/th/TH_reifyType2.hs 1.3 +1 -1 fptools/testsuite/tests/ghc-regress/th/TH_repE1.hs 1.2 +1 -1 fptools/testsuite/tests/ghc-regress/th/TH_repE2.hs 1.2 +1 -1 fptools/testsuite/tests/ghc-regress/th/TH_repE3.hs 1.4 +11 -12 fptools/testsuite/tests/ghc-regress/th/TH_repPrim.hs 1.4 +6 -6 fptools/testsuite/tests/ghc-regress/th/TH_repPrim.stderr 1.5 +2 -10 fptools/testsuite/tests/ghc-regress/th/TH_repPrimOutput.hs 1.5 +2 -2 fptools/testsuite/tests/ghc-regress/th/TH_spliceDecl1.hs 1.3 +1 -2 fptools/testsuite/tests/ghc-regress/th/TH_spliceDecl2.hs 1.3 +2 -2 fptools/testsuite/tests/ghc-regress/th/TH_spliceDecl3.hs 1.5 +4 -4 fptools/testsuite/tests/ghc-regress/th/TH_spliceDecl3_Lib.hs 1.2 +1 -1 fptools/testsuite/tests/ghc-regress/th/TH_spliceE3.hs 1.3 +1 -1 fptools/testsuite/tests/ghc-regress/th/TH_spliceExpr1.hs 1.15 +3 -4 fptools/testsuite/tests/ghc-regress/th/all.T 1.9 +2 -2 fptools/libraries/haskell-src/Makefile _______________________________________________ Cvs-libraries mailing list Cvs-libraries@haskell.org http://www.haskell.org/mailman/listinfo/cvs-libraries
On Thu, Nov 06, 2003 at 05:19:08PM -0000, Simon Peyton-Jones wrote:
data TH_reifyDecl1.R a_1627393116 = TH_reifyDecl1.C a_1627393116
Now there's nothing wrong with this, but it might make sense for the pretty-printer (now in THLib) to clean it up.
I'll do this - looks like it wants monadicising :-/ While I'm there I think it makes sense to change it to use a single pprTH (I think stealing the name ppr would be a bit rude) function (in a PprTH class) rather than a function per type. Thanks Ian
participants (2)
-
Ian Lynagh -
Simon Peyton-Jones