<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Wed, Mar 9, 2016 at 3:52 PM Shawn Erickson &lt;<a href="mailto:shawnce@gmail.com">shawnce@gmail.com</a>&gt; wrote:<br></div><div dir="ltr"><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span><div>Additionally when trying to provide `Strideable` optimized `Collection` default implementations I hit issues like the following (note `Collection.IndexDistance` minimally conforms to SignedInteger). I picked `Strideable` as the optimization point since `RandomAccessCollection.Index` minimally conforms to `Strideable` and `Strideable` provides the first level of possible optimizations after `Comparable`.<br></div><div><br></div><div>extension Collection where Index : Strideable {</div><div>  public func next(i: Index) -&gt; Index {</div><div>    return i.advanced(by: 1) &lt;— this is ok</div><div>  }</div><div>  public func advance(i: Index, by n: IndexDistance) -&gt; Index {</div><div>    return i.advanced(by: n) &lt;— this errors</div><div>  }</div><div>…</div><div>}</div><div><br></div><div>error: cannot invoke &#39;advanced&#39; with an argument list of type &#39;(by: Self.IndexDistance)&#39;</div><div>    return i.advanced(by: n)</div><div>             ^</div><div>note: expected an argument list of type &#39;(by: Self.Index.Stride)&#39;</div><div>    return i.advanced(by: n)</div></span></div></blockquote><div><br></div><div>Actually as soon as I sent that I realized I was looking at the error backwards... Strideable&#39;s advanced(by:) takes something that conforms to SignedNumber. IndexDistance is a SignedInteger which does conform to SignedNumber. So am I hitting a limit of the compiler? ...or missing something obvious here?</div><div><br></div><div><span><div style="font-size:13px">————————————————————————————————————————</div><div style="font-size:13px">Equatable</div><div style="font-size:13px">  ^</div><div style="font-size:13px">Comparable</div><div style="font-size:13px">  ^</div><div style="font-size:13px">Strideable (associatedtype Stride : SignedNumber) -&gt; advanced(by:Self.Stride) &amp; distance(to: Self)</div><div style="font-size:13px">  ^</div><div style="font-size:13px">  ^              SignedNumber</div><div style="font-size:13px">  ^                 ^</div><div style="font-size:13px">Integer &amp; _SignedInteger —&gt; func toIntMax()</div><div style="font-size:13px">  ^</div><div style="font-size:13px">SignedInteger —&gt; func toIntMax()</div><div style="font-size:13px">————————————————————————————————————————</div></span></div><div><br></div><div>-Shawn</div></div></div>