[Haskell-cafe] Lists of Existential DT

Yves Parès limestrael at gmail.com
Sun Feb 28 09:31:31 EST 2010


I have a class Drawable, and some datatypes which are instances of it, and I
would like to be able to draw them all at once!
drawMany window [image, text, otherImage]

I think the type of the function drawMany would be:
drawMany :: Window -> [forall a. (Drawable a) => a] -> IO ()

However it doesn't work.
I know one solution is to make a new datatype (e.g. DrawableObj) which will
data DrawableObj = forall a (Drawable a) => 
                              DrawableObj a

And then declare drawMany as:
drawMany :: Window -> [DrawableObj] -> IO ()

But to use it I have to wrap up myself every drawable in a DrawableObj:
drawMany window [DrawableObj image, DrawableObj text, DrawableObj

Is there another more suitable way to handle a list of drawables?

Yves Parès

Live long and prosper
View this message in context: http://old.nabble.com/Lists-of-Existential-DT-tp27735354p27735354.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

More information about the Haskell-Cafe mailing list