Drop "and" in "where type" constraints
From Successor ML
Contents |
Introduction
Simplify the syntax of "where" constraints by abolishing useless and troublesome sugar.
Motivation
The SML syntax allows several type constraints on a signature to be connected with "and", as in
sigexp where type t1 = ty1 and type t2 = ty2
This syntax is (1) a nightmare to parse (being LR(2)), and only few implementations bother to do it correctly, (2) at odds with the rest of the language, where "and" is always followed by a binding immediately instead of an additional keyword, and (3) completely useless, because writing another "where" instead of "and" has the very same effect. The syntax does not seem to be widely used either, we hence suggest abolishing it.
Assumptions
None.
Syntax
Defined by the following modifications to the Definition:
- In Appendix A, Figure 19, remove the box for signature expressions.
Static Semantics
Unaffected.
Dynamic Semantics
Unaffected.
Interactions
None.
Compatibility
The change breaks all programs using the derived form. However, due to the weak support by most implementations, it does not seem to be widely used. Adapting affected programs is trivial.
Implementation
Significantly simplifes parsing.