[Haskell-cafe] Existentially-quantified constructors, Eq and Show
Benjamin.Rudiak-Gould at cl.cam.ac.uk
Sun Dec 11 14:41:43 EST 2005
John Meacham wrote:
> PS. many, including me, feel 'forall' is a misnomer there and should be
> the keyword 'exists' instead. so just read 'foralls' that come _before_
> the type name as 'exists' in your head and it will make more sense.
I disagree. When you write
forall a. D (P a) (Q a)
it means that there's a variant of D for all types a. It's as though you had
D (P Bool) (Q Bool)
| D (P String) (Q String)
Writing exists instead would mean that there's only one version of D for
some a, and you don't know what that a is; in that case you could only
safely apply D to arguments of type (forall b. P b) and (forall b. Q b).
I think the problem is not with the use of forall, but with the use of the
term "existential type". The fact that existential quantification shows up
in discussions of this language extension is a red herring. Even Haskell 98
has existential types in this sense, since (forall a. ([a] -> Int)) and
((exists a. [a]) -> Int) are isomorphic.
More information about the Haskell-Cafe