"class []" proposal Re: [Haskell-cafe] One thought: Num to 0as ? to list?

Brian Hulley brianh at metamilk.com
Tue Aug 22 14:04:09 EDT 2006

Bulat Ziganshin wrote:
> from one my module:
> copyStream :: (BlockStream h1, BlockStream h2, Integral size)
>           => h1 -> h2 -> size -> IO ()

> in my library and found the way to simplify most of their signatures:
> copyStream :: BlockStream* -> BlockStream** -> Integral -> IO ()
> i think that second block of signatures is an order of magnitude more
> readable

I think template haskell could do this translation. Eg if you declared some 
dummy phantom types so the arg to the template function could be parsed, and 
as a way of telling the function which types were to be replaced by type 
variables with class constraints the block of signatures would just be 
declared in a splice:

$(expandSigs [d|

    data BlockStream'
    data BlockStream''
    data Integral'

    copyStream :: BlockStream' -> BlockStream'' -> Integral' -> IO ()

Though I leave the definition of expandSigs :: Q [Dec] -> Q () as a little 
exercise for the reader... :-)

Best regards, Brian.
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.


More information about the Haskell-Cafe mailing list