Re: [Haskell-cafe] Template Haskell: Generate annotated function of a typeclass
Hi Michael, I was able to do what I wanted using reify instead of reifyInstances, and also I used applyT instead of substT. Thanks 2012/4/13 Ismael Figueroa Palet ifiguer...@gmail.com Thanks for your reply, in particular the reference to subsT! I will work more on this next monday, and report my progress Cheers! 2012/4/13 Michael Sloan mgsl...@gmail.com Hello! 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: http://hackage.haskell.org/packages/archive/haskell-src-meta/0.5.1.2/doc/html/Language-Haskell-Meta-Utils.html#v: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 ifiguer...@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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe -- Ismael -- Ismael ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Template Haskell: Generate annotated function of a typeclass
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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Template Haskell: Generate annotated function of a typeclass
Hello! 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: http://hackage.haskell.org/packages/archive/haskell-src-meta/0.5.1.2/doc/html/Language-Haskell-Meta-Utils.html#v: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 ifiguer...@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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Template Haskell: Generate annotated function of a typeclass
Thanks for your reply, in particular the reference to subsT! I will work more on this next monday, and report my progress Cheers! 2012/4/13 Michael Sloan mgsl...@gmail.com Hello! 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: http://hackage.haskell.org/packages/archive/haskell-src-meta/0.5.1.2/doc/html/Language-Haskell-Meta-Utils.html#v: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 ifiguer...@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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe -- Ismael ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe