For the Arithmetic protocol how about changing it to:<div><br></div><div>    protocol Arithmetic {</div><div>        func + (lhs: Self, rhs: Self) -&gt; Self</div><div><font size="2"><span style="background-color:rgba(255,255,255,0)">        mutating func += (rhs: Self) -&gt; Self</span></font></div><div><font size="2"><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.301961);">        ...</span></font></div><div><font size="2"><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.301961);">    }</span></font></div><div><font size="2"><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.301961);"><br></span></font></div><div><font size="2"><span style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.301961);">That way naming issues are largely avoided, except for `mutating func negate()` which has no operator and would therefore have to be a normal, non-operator, <span></span>func. <br></span></font><br>On Saturday, 16 April 2016, Nicola Salmoria via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">&gt; Oh, a couple more things I just thought of:<br>
&gt;<br>
&gt; &gt; public protocol Arithmetic: Equatable, IntegerLiteralConvertible {<br>
&gt; If your goals include supporting complex numbers, how is IntegerLiteralConvertible going to fit in there?<br>
&gt;<br>
&gt; &gt; /// Initialize to zero<br>
&gt; &gt; init()<br>
&gt; 0 is valuable as the additive identity. Should there also be a way to get 1, the multiplicative identity? If you need both, should these be static properties instead of initializers?<br>
<br>
Interestingly, these two questions are related.<br>
<br>
If you expose the multiplicative identity, you automatically expose a natural way to convert from an integer N: just add `one` to itself N times.<br>
If N is negative, take the opposite.<br>
<br>
For complex numbers the multiplicative identity is 1 + 0i, so this means that Complex(N) = N + 0i.<br>
<br>
As an aside, a default generic implementation of IntegerLiteralConvertible would run in O(log N) steps, using the “double-and-add” algorithm:<br>
<a href="https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Double-and-add" target="_blank">https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Double-and-add</a>.<br>
Though I don’t think this is particularly useful for our use case :-)<br>
<br>
—<br>
Nicola<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;swift-evolution@swift.org&#39;)">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div><br><br>-- <br>-- Howard.<br>