Thanks Brent,
I managed to confuse at least two people! I've stated it in the grammar,
but forgot to give an example:
===begin===
Multiple precedence relationships can be stated for a single precedence
group. Example:
precedencegroup A { }
precedencegroup C { }
precedencegroup B { precedence(> A) precedence(< C) }
By transitivity, precedence of C becomes greater than precedence of A.
===end===
As you can see, your suggested syntax would not look good, because there
can be any number of precedence declarations.
But I agree that bulkiness of my syntax is a problem.
I can think of two solutions:
1. Global-scope precedence relationships. Example:
precedencegroup B : associativity(left)
precedencerelation B > A
precedencerelation B < C
infix operator <$> : B
It's already included as an alternate solution.
2. Limit precedence relationships.
Do we really need a full-blown Directed Acyclic Graph?
Could `above` and `between` be enough?
Example:
precedencegroup B : between(A, C)
This is one of dark places of the proposal, obviously underdiscussed.
Are there practical situations other than `above` and `between`?
Do we really need unlimited relationships per one precedencegroup?
- Anton
Brent Royal-Gordon wrote:
···
I like this proposal, except for the `precedencegroup` syntax, which I
think is a bit overwrought. Rather than this proposal's:
precedencegroup Multiplicative {
associativity(left)
precedence(> Additive)
}
I would prefer to see:
precedence Multiplicative > Additive left
(Or possibly, if the `left` is deemed too inexplicable by itself,
`associativity(left)`.) I don't really think the `precedence` keyword or
the curly brackets bring much to the declaration, and dropping them allows
us to replace the awkward compound `precedencegroup` with the shorter and
equally explanatory `precedence`.