summaryrefslogtreecommitdiff
path: root/testsuite/tests/th/TH_genExLib.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/th/TH_genExLib.hs')
-rw-r--r--testsuite/tests/th/TH_genExLib.hs20
1 files changed, 20 insertions, 0 deletions
diff --git a/testsuite/tests/th/TH_genExLib.hs b/testsuite/tests/th/TH_genExLib.hs
new file mode 100644
index 0000000000..02784ac87b
--- /dev/null
+++ b/testsuite/tests/th/TH_genExLib.hs
@@ -0,0 +1,20 @@
+
+module TH_genExLib where
+
+import Language.Haskell.TH
+
+genAny :: Q Info -> Q [Dec]
+genAny decl = do { d <- decl
+ ; case d of
+ ClassI (ClassD _ name _ _ decls) _ -> return [genAnyClass name decls]
+ _ -> error "genAny can be applied to classes only"
+ }
+
+genAnyClass :: Name -> [Dec] -> Dec
+genAnyClass name decls
+ = DataD [] anyName [] [constructor] []
+ where
+ anyName = mkName ("Any" ++ nameBase name ++ "1111")
+ constructor = ForallC [PlainTV var_a] [ClassP name [VarT var_a]] $
+ NormalC anyName [(NotStrict, VarT var_a)]
+ var_a = mkName "a"