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 <[email protected]>
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@



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to