"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.
http://www.metamilk.com
More information about the Haskell-Cafe
mailing list