[Haskell-cafe] Named function fields vs. type classes

Keith Wansbrough Keith.Wansbrough at cl.cam.ac.uk
Tue Dec 14 10:40:13 EST 2004

> On the other hand, it's difficult or impossible to make a list of a
> bunch of different types of things that have nothing in common save
> being members of the class.

I've recently been playing with making, for each class C, a
"interface" datatype IC (appropriately universally and existentially
qualified so as to include a dictionary for class C), and then making
this IC an instance of class C.  Then I can wrap any instance of C up
in an IC, and make a list of those.

The casts get a bit annoying, though; the compiler can't figure out
that this IC is in some sense the maximum type in class C, and so
can't resolve things like

f :: MyClass a => [a] -> b
f = ...

upcast :: MyClass a => a -> IMyClass  -- usually defined as an instance of class Cast
upcast x = IMyClass x

f [upcast a, upcast b]  -- yields type error

Instead, you have to redefine f as follows:

f' :: [IMyClass] -> b

which is a bit annoying.


--KW 8-)

More information about the Haskell-Cafe mailing list