<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div></div><div>Because I am a mailing list noob, my email wasn't CC'd to all. So here we go again:</div><div><br></div><div><span style="background-color: rgba(255, 255, 255, 0);">Big +1 from me.&nbsp;<br><br>I expected not to like this syntax but I believe it makes it far clearer. It always felt backwards to me to have to come up with all the constraints before the function signature. Maybe this is moot because you should already know what the function should look like before writing. But we are all human and things may change as we are writing it, resulting in a constant going back and forth from the signature to the constraints.&nbsp;<br><br>It reads much more naturally (and I think it's easier to write) when the where clause is after the signature because you have to look *back* to the parameters in the function instead of looking forward. And when having to look forward, you have to parse a possibly long list of constraints before even finding the signature. Repeat this possibly for each constraint and there is some mental overload there.&nbsp;<br><br>With the where at the end, you've already read the function signature and the signature is in a known easy to find place when looking back at it.&nbsp;<br><br>So in summary:<br>- it reads more naturally<br>- more comfortable on the eyes<br>- easier to find the function signature when looking back after reading the constraints&nbsp;<br><br>This all leads to less mental overload IMO<br><br>Brandon&nbsp;</span></div><div><br>On Apr 6, 2016, at 2:37 PM, Shawn Erickson via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Wed, Apr 6, 2016 at 11:36 AM Pyry Jahkola via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><blockquote type="cite">On 06 Apr 2016, at 21:30, Developer via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br></blockquote></div><div style="word-wrap:break-word"><div><blockquote type="cite"><br><div><div>If you've ever gotten to the point where you have a sufficiently generic interface to a thing and you need to constrain it, possibly in an extension, maybe for a generic free function or operator, you know what a pain the syntax can be for these kinds of operations. </div></div></blockquote><div><br></div></div></div><div style="word-wrap:break-word"><div><div>+1 already!</div></div></div><div style="word-wrap:break-word"><div><br><blockquote type="cite"><div><div>Or, if you're feeling ambitious, even<br><br>func anyCommonElements &lt;T, U&gt;<br>where T : SequenceType, U : SequenceType,<br>T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element<br>(lhs: T, _ rhs: U) -&gt; Bool<br></div></div></blockquote></div></div><div style="word-wrap:break-word"><div></div><br><div>I would actually move them as far as after everything else, and right before the definition body. For the above function that would mean:</div><div><br></div><div><span style="font-weight:bold;font-family:Menlo-Regular;font-size:11px">func anyCommonElements&lt;T, U&gt;</span><span style="font-family:Menlo-Regular;font-size:11px"><b>(lhs: T, _ rhs: U) -&gt; Bool</b></span></div></div><div style="word-wrap:break-word"><div><span style="font-family:Menlo-Regular;font-size:11px"><b><font color="#7b219f">&nbsp; &nbsp; where T : SequenceType,</font></b></span></div><div><b><font color="#7b219f"><span style="font-family:Menlo-Regular;font-size:11px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; U : SequenceType,</span><br style="font-family:Menlo-Regular;font-size:11px"><span style="font-family:Menlo-Regular;font-size:11px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T.Generator.Element: Equatable,</span></font></b></div><div><b><font color="#7b219f"><span style="font-family:Menlo-Regular;font-size:11px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T.Generator.Element == U.Generator.Element</span><br style="font-family:Menlo-Regular;font-size:11px"></font></b></div></div><div style="word-wrap:break-word"><div><span style="font-family:Menlo-Regular;font-size:11px">{</span></div><div><span style="font-family:Menlo-Regular;font-size:11px">&nbsp; &nbsp; ...</span></div><div><span style="font-family:Menlo-Regular;font-size:11px">}</span></div><br>
That would make the definition look closer to what the call site looks like.<div><br></div><div>The same would work for generic types &nbsp;too:</div><div><br></div><div><font face="Menlo" style="font-size:11px">public struct Dictionary&lt;Key, Value&gt;</font></div><div><font face="Menlo" style="font-size:11px">&nbsp; &nbsp; where Key : Hashable</font></div><div><font face="Menlo" style="font-size:11px">{</font></div><div><font face="Menlo" style="font-size:11px">&nbsp; &nbsp;...</font></div><div><font face="Menlo" style="font-size:11px">}</font></div></div></blockquote><div><br></div><div><span style="font-size:13px">I very much like this suggestion.</span>&nbsp;</div></div></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></body></html>