|Version 5 (modified by igloo, 3 years ago)|
|Related||Rank2Types, RankNTypes, LiberalTypeSynonyms, PolymorphicComponents, ScopedTypeVariables|
|GHC||mostly (ExplicitForAll; still allows forall as an expression id)|
|Hugs||mostly (+98; still allows forall as an expression id)|
|UHC||mostly (none; still allows forall as an expression id)|
ExplicitForAll enables the use of the keyword 'forall' to make a type explicitly polymorphic. Syntactically, it would mean the following change to Haskell 98:
- forall becomes a reserved word.
- . (dot) becomes a special (not reserved) operator.
- The following syntactic rule changes:
type → forall tyvars . type
| context => type
ftype → btype -> type
gendecl → vars :: type
It does not allow the use of explicitly polymorphic types in any way not already allowed by Haskell 98 for implicitly polymorphic types.
- Small and simple syntactic extension.
- Simplifies the later inclusion of semantic extensions that depend on it, e.g. Rank2Types.
- Easy to implement in tools that don't yet support the semantic extensions.
- The Report already mentions types using the explicit forall-quantified form, so only the grammar changes above are needed.
- A small and incremental extension with little value of its own, only serving as a stepping stone for the various semantic extensions.