<div dir="ltr">Another +1 to `where` at the end.<div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 6, 2016 at 10:33 PM, Matt Whiteside via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">+1 to moving the `where` clause after the function signature.<br>
<br>
-Matt<br>
<div><div><br>
&gt; On Apr 6, 2016, at 12:36, Joe Groff via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt;&gt; On Apr 6, 2016, at 11:30 AM, Developer via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; If you&#39;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.  For example, the Swift book implements this example to motivate where clauses<br>
&gt;&gt;<br>
&gt;&gt; func anyCommonElements &lt;T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element&gt; (lhs: T, _ rhs: U) -&gt; Bool<br>
&gt;&gt;<br>
&gt;&gt; This is noisy and uncomfortable to my eyes, and almost impossible to align correctly.  Per a short discussion on Twitter with Joe Groff and Erica Sadun, I&#39;d like so see what the community feels about moving the where clause out of the angle brackets.  So that example becomes<br>
&gt;&gt;<br>
&gt;&gt; func anyCommonElements &lt;T: SequenceType, U: SequenceType&gt;<br>
&gt;&gt; where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element<br>
&gt;&gt; (lhs: T, _ rhs: U) -&gt; Bool<br>
&gt;&gt;<br>
&gt;&gt; Or, if you&#39;re feeling ambitious, even<br>
&gt;&gt;<br>
&gt;&gt; func anyCommonElements &lt;T, U&gt;<br>
&gt;&gt; where T : SequenceType, U : SequenceType,<br>
&gt;&gt; T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element<br>
&gt;&gt; (lhs: T, _ rhs: U) -&gt; Bool<br>
&gt;&gt;<br>
&gt;&gt; Thoughts?<br>
&gt;<br>
&gt; I think this is a good idea, though I would put the `where` clause after the function signature:<br>
&gt;<br>
&gt; func foo&lt;T: Foo, U: Bar&gt;(x: T, y: U) -&gt; Result&lt;T,U&gt;<br>
&gt;    where T.Foo == U.Bar /*, etc. */<br>
&gt; {<br>
&gt; }<br>
&gt;<br>
&gt; As others noted, it&#39;s also appealing to do this for type declarations too:<br>
&gt;<br>
&gt; struct Foo&lt;T: Foo, U: Bar&gt;<br>
&gt;    where T.Foo == U.Bar<br>
&gt; {<br>
&gt; }<br>
&gt;<br>
&gt; and that gives a consistent feeling with extensions and protocol declarations.<br>
&gt;<br>
&gt; -Joe<br>
&gt; _______________________________________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Trent Nadeau</div>
</div></div>