<div dir="ltr">Hi Tim,<br>This would be very nice to have in Swift/K — is there a proposal to add it? The syntax is similar to Java static methods; should be familiar to people coming from that background. One question (which applies to Java as well): why is it necessary to declare the type variables at the beginning of the line? Can't the compiler just see what variables are being used in the return and argument types?<div>Thanks,<br><div>—Pete</div></div></div><br><div class="gmail_quote">On Fri, Mar 13, 2015 at 2:44 PM Tim Armstrong <<a href="mailto:tim.g.armstrong@gmail.com">tim.g.armstrong@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Here's how I define contains in Swift/T:<br><div><br><span style="font-family:monospace,monospace"><K, V> (boolean o) contains(V A[K], K key)</span><br><br></div><div>K and V declares that K and V are type variables in the scope of the function definition.  I.e. when typechecking call to the function, K and V can be any type, so long as they match in all places.<br><br></div><div>The algorithm for typechecking is to match up input types to the argument types and bind the type variables, e.g. matching a string[int] array to V[K] would bind V=string and K=int, and matching int to K  would bind K=int.  If there isn't a consistent way to bind K and V, e.g. if one of the K's was a string, then typechecking fails.<br></div><div><br><br></div><div>For split, the function type would look like:<br></div><div><code></code>

<p><code><T, K> T[int][K] split(T[K], int n)</code></p><br></div><div>- Tim<br></div></div>
______________________________<u></u>_________________<br>
Swift-devel mailing list<br>
<a href="mailto:Swift-devel@ci.uchicago.edu" target="_blank">Swift-devel@ci.uchicago.edu</a><br>
<a href="https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-devel" target="_blank">https://lists.ci.uchicago.edu/<u></u>cgi-bin/mailman/listinfo/<u></u>swift-devel</a><br>
</blockquote></div>