[Haskell-cafe] Re: Existencial quantification and polymorphic datatypes (actually, components...)

Gleb Alexeyev gleb.alexeev at gmail.com
Tue Jan 20 12:09:56 EST 2009

Mauricio wrote:

> But how is this:
> data SomeNum = forall a. SN a
> different from:
> data SomeNum = SN (forall a. a)

In the first case the constructor SN can be applied to the monomorphic 
value of any type, it effectively hides the type of the argument. For 
example, you can have a list like [SN True, SN "foo", SN 42], because 
for all x SN x has type SomeNum.

In the second case, SN can be applied only to polymorphic values, SN 
True or SN "foo" won't compile.

The only thing that both types have in common - they are both useless. 
Polymorphic and existential types must have more structure to be useful 
- you cannot _construct_ SomeNum #2 and you cannot do anything to the 
value you _extract_ from SomeNum #1.

More information about the Haskell-Cafe mailing list