Cale Gibbard wrote:

> How do we decide which constructor to apply, or even which existential
> type is desired? 

By giving a type declaration. - I guess you criticize this because then,
writing a type declaration would change the meaning of the program.

You know in Java I write, e. g.  Component c = new Button ("foobar");
essentially hiding that  c  is a Button,
and only telling that it will be used as a Component.

So we have in fact a distinction between the type of the object
and the type of a name that refers to it. (Of course both must be
related.) From an engineering standpoint, this is nice as it can be
used to enforce information hiding.
How can we achieve the same effect in Haskell?


> Perhaps you disagree? :) I'm not exactly sure what kind of design
> you're thinking of where it's so inconvenient to apply the constructor
> by hand that it would warrant this kind of change to the language --

The inconvenience is not so much in writing the constructor:
I also have to invent its name and write out its definition somewhere.

> perhaps you could give an example. :)

Button/Component, LinkedList/List etc. I know you asked for Haskell
examples: I will give them as soon as there are libraries that contain
them :-) I think current libraries do not use this idea (existentials)
much because there is no syntactical support .. quoting Wittgenstein,
[5.6] Die Grenzen meiner Sprache bedeuten die Grenze meiner Welt.
(The limits of my language mean the limits of my world.)


PS: by my count, a lot of the typecasts in Java programs come from using
the pre-1.5 collections framework. But that's been fixed meanwhile, and
it has nothing to do with the above discussion of information hiding.
-- 
-- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 --
---- http://www.imn.htwk-leipzig.de/~waldmann/ -------

_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime

Reply via email to