diff options
Diffstat (limited to 'testsuite/tests/th/TH_genExLib.hs')
-rw-r--r-- | testsuite/tests/th/TH_genExLib.hs | 20 |
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" |