summaryrefslogtreecommitdiff
path: root/libraries/template-haskell
diff options
context:
space:
mode:
authorGeoffrey Mainland <mainland@apeiron.net>2013-06-04 13:58:52 +0100
committerGeoffrey Mainland <mainland@apeiron.net>2013-10-04 14:58:26 -0400
commitbb89c59f9c489df7ef1f12e0155898d913033e12 (patch)
treef671a234d5115872c06e66f79bcea5bdc43815e4 /libraries/template-haskell
parent18f2e5234ba3e65439812b53c17db4d733d289d2 (diff)
downloadhaskell-bb89c59f9c489df7ef1f12e0155898d913033e12.tar.gz
Add support for top-level finalizers
Diffstat (limited to 'libraries/template-haskell')
-rw-r--r--libraries/template-haskell/Language/Haskell/TH/Syntax.hs9
1 files changed, 9 insertions, 0 deletions
diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
index 79e29448bb..b62f15a67b 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
+++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
@@ -64,6 +64,8 @@ class (Monad m, Applicative m) => Quasi m where
qAddTopDecls :: [Dec] -> m ()
+ qAddModFinalizer :: Q () -> m ()
+
-----------------------------------------------------
-- The IO instance of Quasi
--
@@ -91,6 +93,7 @@ instance Quasi IO where
qRecover _ _ = badIO "recover" -- Maybe we could fix this?
qAddDependentFile _ = badIO "addDependentFile"
qAddTopDecls _ = badIO "addTopDecls"
+ qAddModFinalizer _ = badIO "addModFinalizer"
qRunIO m = m
@@ -346,6 +349,11 @@ addDependentFile fp = Q (qAddDependentFile fp)
addTopDecls :: [Dec] -> Q ()
addTopDecls ds = Q (qAddTopDecls ds)
+-- | Add a finalizer that will run in the Q monad after the current module has
+-- been type checked. This only makes sense when run within a top-level splice.
+addModFinalizer :: Q () -> Q ()
+addModFinalizer act = Q (qAddModFinalizer (unQ act))
+
instance Quasi Q where
qNewName = newName
qReport = report
@@ -358,6 +366,7 @@ instance Quasi Q where
qRunIO = runIO
qAddDependentFile = addDependentFile
qAddTopDecls = addTopDecls
+ qAddModFinalizer = addModFinalizer
----------------------------------------------------