
Dear Cafe, Hope you all had a nice Christmas. I have been playing with generating method instances using Template Haskell but am a bit stuck now trying to generate an instance for a parametrized data type. I would like to generate the following:
instance (MyClass a) => MyClass (Tree a) where mymethod _ = "todo"
I defined a genMyClassInstance that is working fine for unparametrized data types, but clearly there is nothing here that inserts the '(MyClass a) =>' part here. My first question is: how should I instruct Template Haskell to insert the beforementioned code when appropriate?
genMyClassInstance :: Name -> Q [Dec] genMyClassInstance name = [d|instance MyClass $(conT name) where mymethod _ = "todo" |]
My second question is how to pass the Name of a parametrized data type? I tried the following, but GHC does not seem to like that: "Not in scope: type constructor or class `Tree a' Perhaps you meant `Tree'"
$(genMyInstance (mkName "Tree a"))
Thank you! Maarten Faddegon