Existentials

John Meacham john@repetae.net
Thu, 17 Apr 2003 04:02:08 -0700


Sounds good to me. I am all for anything that unifies haskell syntax and
normal mathematical notation. The multiple meanings of forall has always
bugged me anyway and I think makes it harder to understand how to
interpret types as is.
        John

On Thu, Apr 17, 2003 at 09:02:45AM +0100, Simon Peyton-Jones wrote:
> Dear GHC users, Hugs users, and Hugs implementors
> 
> Many of you have grown to love existential data types, which we current
> write like this:
> 
> 	data T = forall a. Foo a (a -> Int)
> 
> Mark and I chose 'forall' rather than 'exists' to save grabbing another
> keyword from the programmer.  And indeed, the type of the constructor
> Foo is
> 	Foo :: forall a. a -> (a->Int) -> T
> 
> But every single time I explain this to someone, I find I have to make
> excuses for using the term 'forall'.  I say "it really means 'exists',
> but we didn't want to lose another keyword". 
> 
> I have gradually concluded that our decision was a mistake.  (In
> fairness to Mark, I think I was the primary advocate for it.)  I reckon
> that we should
> 
> 	Allow 'exists'	
> 	Deprecate 'forall' (for defining existentials, that is)
> 	Eventually allow only 'exists'
> 
> 
> Does anyone have any opinions on this topic?  It's a small point, but
> one that bites quite frequently.  It might even be possible to arrange
> that 'forall' and 'exists' were only keywords in types, and not in
> terms, but I'm not sure it's worth the bother.
> 
> I don't think it affects NHC, because it's not H98 anyway.

-- 
---------------------------------------------------------------------------
John Meacham - California Institute of Technology, Alum. - john@foo.net
---------------------------------------------------------------------------