summaryrefslogtreecommitdiff
path: root/testsuite/tests/th/T10697_sourceUtil.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/th/T10697_sourceUtil.hs')
-rw-r--r--testsuite/tests/th/T10697_sourceUtil.hs35
1 files changed, 35 insertions, 0 deletions
diff --git a/testsuite/tests/th/T10697_sourceUtil.hs b/testsuite/tests/th/T10697_sourceUtil.hs
new file mode 100644
index 0000000000..048a422b99
--- /dev/null
+++ b/testsuite/tests/th/T10697_sourceUtil.hs
@@ -0,0 +1,35 @@
+{-# LANGUAGE StrictData, TemplateHaskell #-}
+module T10697_sourceUtil where
+
+import Language.Haskell.TH
+
+makeSimpleDatatype :: Name
+ -> Name
+ -> SourceUnpackednessQ
+ -> SourceStrictnessQ
+ -> Q Dec
+makeSimpleDatatype tyName conName srcUpk srcStr =
+ dataD (cxt []) tyName [] Nothing [normalC conName
+ [bangType (bang srcUpk srcStr) (conT ''Int)]] (cxt [])
+
+checkBang :: Name
+ -> SourceUnpackednessQ
+ -> SourceStrictnessQ
+ -> ExpQ
+checkBang n srcUpk1 srcStr1 = do
+ TyConI (DataD _ _ _ _ [NormalC _ [(Bang srcUpk2 srcStr2, _)]] _) <- reify n
+ srcUpk1' <- srcUpk1
+ srcStr1' <- srcStr1
+ if srcUpk1' == srcUpk2 && srcStr1' == srcStr2
+ then [| True |]
+ else [| False |]
+
+data E1 = E1 Int -- No unpackedness, no strictness
+data E2 = E2 !Int -- No unpackedness, strict
+data E3 = E3 ~Int -- No unpackedness, lazy
+data E4 = E4 {-# NOUNPACK #-} Int -- NOUNPACK, no strictness
+data E5 = E5 {-# NOUNPACK #-} !Int -- NOUNPACK, strict
+data E6 = E6 {-# NOUNPACK #-} ~Int -- NOUNPACK, lazy
+data E7 = E7 {-# UNPACK #-} Int -- UNPACK, no strictness
+data E8 = E8 {-# UNPACK #-} !Int -- UNPACK, strict
+data E9 = E9 {-# UNPACK #-} ~Int -- UNPACK, lazy