Add TH support for UNPACK pragmas (Trac #5290)
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 18 Jul 2011 22:25:51 +0000 (23:25 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Mon, 18 Jul 2011 22:25:51 +0000 (23:25 +0100)
The extension is nice, because it just adds an extra
constructor to the existing data type 'Strict'.

Thanks to Mikhail Vorozhtsov.

libraries/template-haskell/Language/Haskell/TH/Lib.hs
libraries/template-haskell/Language/Haskell/TH/Ppr.hs
libraries/template-haskell/Language/Haskell/TH/Syntax.hs

index fc8ab76..7fe6676 100644 (file)
@@ -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 (,)
index 6c324f0..dc43f4b 100644 (file)
@@ -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
index b763aba..96f75f4 100644 (file)
@@ -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@