|Version 10 (modified by igloo, 4 years ago) (diff)|
|Related||Rank2Types, RankNTypes, LiberalTypeSynonyms, PolymorphicComponents, ScopedTypeVariables|
|GHC||mostly (ExplicitForAll; still allows forall as an expression id; allows superfluous vars to be quantified)|
|Hugs||mostly (+98; still allows forall as an expression id; doesn't allow 0 tyvars to be quantified)|
|UHC||mostly (none; still allows forall as an expression id; allows superfluous vars to be quantified; doesn't allow 0 tyvars to be quantified)|
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.
Changes relative to H2010 report.
In Section 2.4:
In Section 3:
In Section 4.1.2:
In Section 4.1.4:
- 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.