<div dir="ltr">OK, question 2 closed, we do need unlimited relationships.<div>Some critique to Brent&#39;s options:</div><div>1. No separators, with multiple relations it becomes unobvious, which comparison corresponds to which group</div><div>2. `left` appears suddenly, it may not be clear that it is associativity</div><div>3. Where is declaration of the precedence group? It looks like two relationship declarations, but in Swift, all entities tend to be pre-declared</div><div>4. Remove @, otherwise not that bad</div><div>5. Actually, that was the very first version of the proposal. Over time, it morphed to version in alternative solutions:</div><div><br></div><div><div style="font-size:12.8px">precedencegroup B : associativity(left)</div><div style="font-size:12.8px">precedencerelation B &gt; A</div><div style="font-size:12.8px">precedencerelation B &lt; C</div></div><div><br></div><div>The specific syntax is discussable:</div><div><br></div><div><div style="font-size:12.8px">precedencegroup <span style="font-size:12.8px">associativity(left) </span><span style="font-size:12.8px">B</span></div><div style="font-size:12.8px">precedence B &gt; A</div><div style="font-size:12.8px">precedence B &lt; C</div></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">We could also stretch inheritance-like syntax:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">precedence B : associativity(left), above(A), below(C)</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">That is my current favourite among one-liners, if we don&#39;t want separate relationship declaration.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">On Matthew&#39;s version: I like that it is lightweight, but I don&#39;t like that `left` is a &quot;sudden&quot; word again, and that relationships turn into a mess when written on a single line.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">- Anton</div><div style="font-size:12.8px"><br></div><div class="gmail_extra"><div class="gmail_quote">2016-05-19 23:36 GMT+03:00 Brent Royal-Gordon <span dir="ltr">&lt;<a href="mailto:brent@architechies.com" target="_blank">brent@architechies.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span>&gt; I managed to confuse at least two people! I&#39;ve stated it in the grammar, but forgot to give an example:<br>
&gt;<br>
&gt; ===begin===<br>
&gt; Multiple precedence relationships can be stated for a single precedence group. Example:<br>
&gt; ```swift<br>
&gt; precedencegroup A { }<br>
&gt; precedencegroup C { }<br>
&gt; precedencegroup B { precedence(&gt; A) precedence(&lt; C) }<br>
&gt; ```<br>
&gt; By transitivity, precedence of C becomes greater than precedence of A.<br>
&gt; ===end===<br>
&gt;<br>
&gt; As you can see, your suggested syntax would not look good, because there can be any number of precedence declarations.<br>
<br>
</span>Ah, I see.<br>
<span><br>
&gt; 2. Limit precedence relationships.<br>
&gt;<br>
&gt; Do we really need a full-blown Directed Acyclic Graph?<br>
&gt; Could `above` and `between` be enough?<br>
&gt;<br>
&gt; Example:<br>
&gt;<br>
&gt; precedencegroup B : between(A, C)<br>
&gt;<br>
&gt; This is one of dark places of the proposal, obviously underdiscussed.<br>
&gt; Are there practical situations other than `above` and `between`?<br>
&gt; Do we really need unlimited relationships per one precedencegroup?<br>
<br>
</span>We probably do if you&#39;re serious about having operators whose precedence relative to each other is undefined. Moreover, you actually have to be prepared for *more than* two relationships, or two relationships which are both on the same &quot;side&quot;, so &quot;between&quot; doesn&#39;t cut the mustard.<br>
<br>
I can see three ways to fit multiple relationships on one line:<br>
<br>
1.      precedence Multiplicative &gt; Additive &lt; BitwiseShift left<br>
2.      precedence Multiplicative &gt; Additive, &lt; BitwiseShift left<br>
3.      precedence Multiplicative &gt; Additive, Multiplicative &lt; BitwiseShift left<br>
<br>
Another option would be to have `precedence` lines declare-or-redeclare *all* of the precedence levels in them, not just the one on the left of the operator. Then you would write something like:<br>
<br>
4.      precedence @associativity(left) Multiplicative &gt; Additive<br>
        precedence Multiplicative &lt; BitwiseShift<br>
<br>
It would be an error to have two `precedence` lines which marked the same precedence level with a different `@associativity`. Of course, we could instead put associativity on its own line, perhaps allowing multiple declarations for compactness:<br>
<br>
5.      precedence Multiplicative &gt; Additive<br>
        precedence Multiplicative &lt; BitwiseShift<br>
        associativity left Cast, Comparative, Multiplicative, Additive<br>
<br>
I think 5 is my preference, but if we want a single-line syntax, I&#39;d probably favor 2.<br>
<span><font color="#888888"><br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
<br>
</font></span></blockquote></div><br></div></div>