On May 5, 2010, at 9:52 PM, John Creighton wrote:

I've seen forall used in a few places related to Haskell. I know their
is a type extension call "explicit forall" but by the way it is
documnted in some places, the documentation makes it sound like it
does nothing usefull.

However on Page 27 of Haskell's overlooked object system:


We define an existential envelope for shape data.
data OpaqueShape = forall x. Shape x => HideShape x

...
(presumably:)
class Shape x where area :: x -> Float ... etc...

It seems that forall can be used as a form of up casting.

Yes, but you can do this without the type class magic, and have the same degree of safety.

> data Shape = Square Int | Rectangle Int Int | Circle Float Float | etc...
> data OpaqueShape = HideShape Shape
> area :: OpaqueShape -> Float
> area = ...

These constructs are structurally equivalent. The extra layer of abstraction doesn't really add anything in either case. HideShape (as a function) is an isomorphism onto Shapes in both cases.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to