[Haskell-cafe] Template Haskell: Generate annotated function of a typeclass

Michael Sloan mgsloan at gmail.com
Fri Apr 13 21:15:48 CEST 2012


It seems like you would want to use "reifyInstances" in order to get
all of the instances associated with a class.  Then, you can match up
the variables in each instance with the variables in the class
declaration, and create a mapping from the class variables to the
instance parameters.  Then, you can apply these mappings with substT:

The result would also need to have the context of the instance,
perhaps reduced to just the constraints that mention the type
variables used in the selected function.

-Michael Sloan

On Fri, Apr 13, 2012 at 11:37 AM, Ismael Figueroa Palet
<ifigueroap at gmail.com> wrote:
> Hi all, I think this is the right place for the following questions and I
> thank beforehand for your answers :-)
> I'm experimenting with typeclasses and TH, and I want to define a 'macro'
> that works more or less like this:
> Given the name of a typeclass and a function, return the expressions
> corresponding to the type-annotated instances, for instance
> $(foo Show show)
> should translate to:
> ["(show :: Int -> String)",  "(show :: Bool -> String)", ....]
> for all instances currently in scope.
> I'm currently playing with the isInstance function (I'm running GHC 7.4.1)
> and can get a list of instances, and check if a given type is part of a
> typeclass or not. But I don't know how to create the expression
> corresponding to "instantiated function", as above.
> Thanks!
> --
> Ismael
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

More information about the Haskell-Cafe mailing list