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.
-- Ben
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe