Hugo Pacheco | 8 Jul 2007 18:01
Picon

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
_______________________________________________
template-haskell mailing list
template-haskell <at> haskell.org
http://www.haskell.org/mailman/listinfo/template-haskell
Ian Lynagh | 8 Jul 2007 18:24
Picon
Gravatar

Re: Newbie question - class dependencies

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
Hugo Pacheco | 8 Jul 2007 19:10
Picon

Re: Newbie question - class dependencies

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
_______________________________________________
template-haskell mailing list
template-haskell <at> haskell.org
http://www.haskell.org/mailman/listinfo/template-haskell

Gmane