[commit: template-haskell] master: Add TH support for UNPACK pragmas (Trac #5290) (15f68f5)
Simon Peyton Jones
simonpj at microsoft.com
Thu Jul 21 23:42:36 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/template-haskell
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/15f68f57ca685933d18d88655e91ea692ccd198f
>---------------------------------------------------------------
commit 15f68f57ca685933d18d88655e91ea692ccd198f
Author: Simon Peyton Jones <simonpj at microsoft.com>
Date: Mon Jul 18 23:25:51 2011 +0100
Add TH support for UNPACK pragmas (Trac #5290)
The extension is nice, because it just adds an extra
constructor to the existing data type 'Strict'.
Thanks to Mikhail Vorozhtsov.
>---------------------------------------------------------------
Language/Haskell/TH/Lib.hs | 3 ++-
Language/Haskell/TH/Ppr.hs | 1 +
Language/Haskell/TH/Syntax.hs | 2 +-
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/Language/Haskell/TH/Lib.hs b/Language/Haskell/TH/Lib.hs
index fc8ab76..7fe6676 100644
--- a/Language/Haskell/TH/Lib.hs
+++ b/Language/Haskell/TH/Lib.hs
@@ -457,9 +457,10 @@ sigT t k
t' <- t
return $ SigT t' k
-isStrict, notStrict :: Q Strict
+isStrict, notStrict, unpacked :: Q Strict
isStrict = return $ IsStrict
notStrict = return $ NotStrict
+unpacked = return Unpacked
strictType :: Q Strict -> TypeQ -> StrictTypeQ
strictType = liftM2 (,)
diff --git a/Language/Haskell/TH/Ppr.hs b/Language/Haskell/TH/Ppr.hs
index 6c324f0..dc43f4b 100644
--- a/Language/Haskell/TH/Ppr.hs
+++ b/Language/Haskell/TH/Ppr.hs
@@ -374,6 +374,7 @@ pprStrictType :: (Strict, Type) -> Doc
-- Prints with parens if not already atomic
pprStrictType (IsStrict, t) = char '!' <> pprParendType t
pprStrictType (NotStrict, t) = pprParendType t
+pprStrictType (Unpacked, t) = text "{-# UNPACK #-} !" <> pprParendType t
------------------------------
pprParendType :: Type -> Doc
diff --git a/Language/Haskell/TH/Syntax.hs b/Language/Haskell/TH/Syntax.hs
index b763aba..96f75f4 100644
--- a/Language/Haskell/TH/Syntax.hs
+++ b/Language/Haskell/TH/Syntax.hs
@@ -862,7 +862,7 @@ data Pred = ClassP Name [Type] -- ^ @Eq (Int, a)@
| EqualP Type Type -- ^ @F a ~ Bool@
deriving( Show, Eq, Data, Typeable )
-data Strict = IsStrict | NotStrict
+data Strict = IsStrict | NotStrict | Unpacked
deriving( Show, Eq, Data, Typeable )
data Con = NormalC Name [StrictType] -- ^ @C Int a@
More information about the Cvs-libraries
mailing list