[commit: packages/template-haskell] wip/th-new: Add Template Haskell state. (9c805c2)

git at git.haskell.org git
Fri Oct 4 21:51:25 UTC 2013


Repository : ssh://git at git.haskell.org/template-haskell

On branch  : wip/th-new
Link       : http://git.haskell.org/packages/template-haskell.git/commitdiff/9c805c2007b826f629ab17d8bcdc6fcf96a7fc0c

>---------------------------------------------------------------

commit 9c805c2007b826f629ab17d8bcdc6fcf96a7fc0c
Author: Geoffrey Mainland <mainland at apeiron.net>
Date:   Tue Jun 4 16:22:06 2013 +0100

    Add Template Haskell state.
    
    The Quasi monad can now carry state, and this state can be shared amongst
    quasiquoters/splices/etc. State is stored in a finite map of Dynamic values and
    is indexed by TypeReps.


>---------------------------------------------------------------

9c805c2007b826f629ab17d8bcdc6fcf96a7fc0c
 Language/Haskell/TH/Syntax.hs |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/Language/Haskell/TH/Syntax.hs b/Language/Haskell/TH/Syntax.hs
index b62f15a..11a35c1 100644
--- a/Language/Haskell/TH/Syntax.hs
+++ b/Language/Haskell/TH/Syntax.hs
@@ -66,6 +66,10 @@ class (Monad m, Applicative m) => Quasi m where
 
   qAddModFinalizer :: Q () -> m ()
 
+  qGetQ :: Typeable a => m (Maybe a)
+
+  qPutQ :: Typeable a => a -> m ()
+
 -----------------------------------------------------
 --	The IO instance of Quasi
 --
@@ -94,6 +98,8 @@ instance Quasi IO where
   qAddDependentFile _ = badIO "addDependentFile"
   qAddTopDecls _      = badIO "addTopDecls"
   qAddModFinalizer _  = badIO "addModFinalizer"
+  qGetQ               = badIO "getQ"
+  qPutQ _             = badIO "putQ"
 
   qRunIO m = m
 
@@ -354,6 +360,14 @@ addTopDecls ds = Q (qAddTopDecls ds)
 addModFinalizer :: Q () -> Q ()
 addModFinalizer act = Q (qAddModFinalizer (unQ act))
 
+-- | Get state from the Q monad.
+getQ :: Typeable a => Q (Maybe a)
+getQ = Q qGetQ
+
+-- | Replace the state in the Q monad.
+putQ :: Typeable a => a -> Q ()
+putQ x = Q (qPutQ x)
+
 instance Quasi Q where
   qNewName  	    = newName
   qReport   	    = report
@@ -367,6 +381,8 @@ instance Quasi Q where
   qAddDependentFile = addDependentFile
   qAddTopDecls      = addTopDecls
   qAddModFinalizer  = addModFinalizer
+  qGetQ             = getQ
+  qPutQ             = putQ
 
 
 ----------------------------------------------------




More information about the ghc-commits mailing list