Newbie question - class dependencies
Hi, I'm wondering if I can (ab)use from TH in order to generalize a context-dependant function into a generic function without that context, as long as I now that the arguments I'm applying the function to belong to the class. I guess this would work similarly to an automatic instance generation example. My example would be: module Main where myprint :: a -> String myprint = show main = do putStr $ myprint 1 putStr $ myprint '2' My ideia would be to stage the computation of *myprint* until it is called, where the *Show* instance can be satisfied. hugo
On Sun, Jul 08, 2007 at 05:01:21PM +0100, Hugo Pacheco wrote:
module Main where
myprint :: a -> String myprint = show
main = do putStr $ myprint 1 putStr $ myprint '2'
My ideia would be to stage the computation of *myprint* until it is called, where the *Show* instance can be satisfied.
Do you mean that you want to have myprint :: Integer -> String myprint = show generated when GHC notices that myprint is called with an Integer type? Is so, then no, TH, can't do that. What you can do is to write a function mkMyPrint :: Type -> Q [Dec] which you could then call like so: $( mkMyPrint ''Integer ) but you have to do so by hand. Thanks Ian
What I do need is to delay the evaluation of myprint, so I can replace it with the specialized version, but you said it isn't possible. Thanks anyway, hugo
participants (2)
-
Hugo Pacheco -
Ian Lynagh