| 18 | | !ExplicitForAll enables the use of the keyword 'forall' to make a type |
| 19 | | explicitly polymorphic. Syntactically, it would mean the following |
| 20 | | change to Haskell 98: |
| 21 | | |
| 22 | | * forall becomes a reserved word. |
| 23 | | * . (dot) becomes a special (not reserved) operator. |
| 24 | | * The following syntactic rule changes: |
| 25 | | |
| 26 | | ''type'' → forall ''tyvars'' . ''type'' |
| 27 | | `|` ''context'' => ''type'' |
| 28 | | |
| 29 | | `|` ''ftype'' |
| 30 | | |
| 31 | | ''ftype'' → ''btype'' -> ''type'' |
| 32 | | `|` ''btype'' |
| 33 | | |
| 34 | | ''gendecl'' → ''vars'' :: ''type'' |
| 35 | | |
| 36 | | It does not allow the use of explicitly polymorphic types in any way |
| 37 | | not already allowed by Haskell 98 for implicitly polymorphic types. |
| | 18 | !ExplicitForAll enables the use of the keyword 'forall' to explicitly state that a type is polymorphic in its free type variables. |
| | 19 | It does not allow any types to be written that cannot already be written; it just allows the programmer to explicitly state the (currently implicit) quantification. |