Proposal: Deprecate ExistentialQuantification
Stefan Holdermans
stefan at cs.uu.nl
Sun Jun 28 03:43:16 EDT 2009
Niklas,
> My rationale is as follows. With the introduction of GADTs, we now
> have two ways to write datatype declarations, the old simple way and
> the GADTs way. The GADTs way fits better syntactically with Haskell's
> other syntactic constructs, in all ways. The general style is
> (somewhat simplified) "keyword type 'where' decls", where keyword can
> in Haskell 98 be class or instance, but with GADTs also data. The old
> simple way of defining data types is the odd one out. It certainly has
> its uses though, in particular when defining some simple (but possibly
> large) enum-like datatype (like cabal's Extension type incidentally),
> then it obviously becomes tedious to have to restate the trivial type
> signature for each constructor.
That's why one should really be allowed to group constructor's in a
type's definition:
data Colour :: * where
Red, Green, Blue :: Colour
This is consistent with what is allowed for type signatures for
functions.
More general, whatever way your proposal is going, I think you should
have it reflect that there are two, more or less unrelated, issues here:
1. The expressiveness of data types: algebraic data types <
existential data types < GADTs.
2. The syntax of type definitions: the classic, Haskell 98 syntax and
the new, cool listings-of-constructor-signature syntax. (Don't call
the latter NewTypeSyntax or anything similar in a LANGUAGE pragma;
choose something descriptive.)
These are really orthogonal issues: all three levels of expressiveness
of types can be expressed in either syntax. Therefore: keep these
issues separated in your proposal.
Just my two cents,
Stefan
More information about the Haskell-prime
mailing list