<div dir="ltr">AH!  I wasn&#39;t familiar enough with the LazyCollectionType protocol to realize that its map() function had a different signature.<div><br></div><div>So, presumably, if I pass a non-throwing closure, the compiler will choose the lazy map().  However, it&#39;s not immediately obvious to me why it would be chosen.  Is it because the LazyCollectionType version of map() &quot;shadows&quot; the CollectionType whenever either one could be chosen (since LazyCollectionType extends CollectionType)?  Or is it because the function with the more restrictive argument type is always chosen when more than one version of the function could match?</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 28, 2016 at 5:38 PM, Dmitri Gribenko <span dir="ltr">&lt;<a href="mailto:gribozavr@gmail.com" target="_blank">gribozavr@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, Jun 28, 2016 at 3:37 PM, Aaron Bohannon via swift-users<br>
&lt;<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>&gt; wrote:<br>
&gt; Does the code below have a well-defined behavior?<br>
<br>
</span>It invokes the eager map() that is available on Array.lazy.<br>
Array.lazy is a collection, so it has an eager map() from the<br>
Collection protocol.  The lazy map() does not accept a throwing<br>
closure, so it does not match and the type checker chooses the eager<br>
one.<br>
<br>
Arguably, in non-generic context this code should not type check.<br>
<span class="HOEnZb"><font color="#888888"><br>
Dmitri<br>
<br>
--<br>
main(i,j){for(i=2;;i++){for(j=2;j&lt;i;j++){if(!(i%j)){j=0;break;}}if<br>
(j){printf(&quot;%d\n&quot;,i);}}} /*Dmitri Gribenko &lt;<a href="mailto:gribozavr@gmail.com">gribozavr@gmail.com</a>&gt;*/<br>
</font></span></blockquote></div><br></div>