<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>Off the top of my head? As the language stands now, maybe a ton of extensions so that it never actually hits the fully generic version?</div><div><br></div><div><span style="background-color: rgba(255, 255, 255, 0);">extension Addable where Self == Int8&nbsp;{...}</span></div><div><span style="background-color: rgba(255, 255, 255, 0);">extension Addable where Self == Int16</span><span style="background-color: rgba(255, 255, 255, 0);">&nbsp;{...}</span></div><div>extension Addable where Self == Int32 {</div><div><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; static func + &lt;T: Addable&gt; (lhs: Self, rhs: Int8) -&gt; Self {...}</span></div><div>&nbsp; static func + &lt;T: Addable&gt; (lhs: Self, rhs: Int16) -&gt; Self {...}</div><div>&nbsp; <span style="background-color: rgba(255, 255, 255, 0);">static func + &lt;T: Addable&gt; (lhs: Self, rhs: Int32) -&gt; Self {...}</span></div><div><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; static func + &lt;T: Addable&gt; (lhs: Self, rhs: Int64) -&gt; Int64 {...}</span></div><div>}</div><div><span style="background-color: rgba(255, 255, 255, 0);">extension Addable where Self == Int64&nbsp;{...}</span></div><div><span style="background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="background-color: rgba(255, 255, 255, 0);">Dunno if that'll compile... it might need an `_IntNNType` protocol for each integer type so that the where clause could be "where Self: _Int32Type" instead of "where Self == Int32" (of course, i</span>f such a thing were actually done, the obvious next step would be to make `UInt64` conform to `_Int8Type`, and see just how close you can get to wat&nbsp;<a href="https://www.destroyallsoftware.com/talks/wat">https://www.destroyallsoftware.com/talks/wat</a>).</div><div><br></div><div>Even if that works, though, it'll all come crashing down as soon as someone makes an `Int128`... oh, nuts! I forgot about `DoubleWidth`!</div><div><br></div><div>Yeah, I don't think I can just pull that particular implementation out of the air.</div><div><br></div><div>- Dave Sweeris</div><div><br></div><div>On Jun 17, 2017, at 21:18, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com">xiaodi.wu@gmail.com</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><div>And, without integer literals as generic parameters, how would you express this operation?</div><div><br></div><div><br><div class="gmail_quote"><div>On Sat, Jun 17, 2017 at 23:01 David Sweeris &lt;<a href="mailto:davesweeris@mac.com">davesweeris@mac.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><br></div><div>On Jun 17, 2017, at 20:43, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:<br><br></div><blockquote type="cite"><div>In Swift, all types and all operators are implemented in the standard library. How do you express the idea that, when you add values of disparate types T and U, the result should be of the type with greater precision? You need to be able to spell this somehow.</div>
</blockquote><br></div><div><div>Oh, ok... I thought you meant "conditional conformance" or something <i>concrete</i> :-D</div><div><br></div><div>Off the top of my head, with "literals as generic parameters",</div><div>protocol Addable {</div><div>&nbsp; associatedtype BitsOfPrecision: IntegerLiteral</div><div>&nbsp; static func + &lt;T: Addable&gt; (_: Self, _: T) -&gt; T where T.<span style="background-color:rgba(255,255,255,0)">BitsOfPrecision &gt;</span></div><div><span style="background-color:rgba(255,255,255,0)">BitsOfPrecision</span></div><div><div><span style="background-color:rgba(255,255,255,0)">&nbsp; static func + &lt;T: Addable&gt; (_: Self, _: T) -&gt; Self where T.BitsOfPrecision &lt;=&nbsp;</span><span style="background-color:rgba(255,255,255,0)">BitsOfPrecision</span></div></div><div><span style="background-color:rgba(255,255,255,0)">}</span></div><div><span style="background-color:rgba(255,255,255,0)"><br></span></div><div><span style="background-color:rgba(255,255,255,0)">Although, come to think of it, I suppose that's a bit more than simply using literals as types. Still, it's all information that's available at compile time, though.</span></div><div><span style="background-color:rgba(255,255,255,0)"><br></span></div><div><span style="background-color:rgba(255,255,255,0)">- Dave Sweeris&nbsp;</span></div></div></blockquote></div></div>
</div></blockquote></body></html>