Newbie question - class dependencies

View: New views
3 Messages — Rating Filter:   Alert me  

Newbie question - class dependencies

by Hugo Pacheco :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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@...
http://www.haskell.org/mailman/listinfo/template-haskell

Re: Newbie question - class dependencies

by Ian Lynagh :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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

_______________________________________________
template-haskell mailing list
template-haskell@...
http://www.haskell.org/mailman/listinfo/template-haskell

Re: Newbie question - class dependencies

by Hugo Pacheco :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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@...
http://www.haskell.org/mailman/listinfo/template-haskell