<div style="white-space:pre-wrap">The burden of proof for adding new features is different from that for taking away existing features.<br><br>If a feature doesn&#39;t yet exist, a successful proposal will show how it provides additional and non-trivial utility. If a feature already exists, a successful proposal to remove it will show how it is harmful to the language or contrary to the direction in which it is evolving.<br></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jun 6, 2016 at 15:38 Tim Vermeulen &lt;<a href="mailto:tvermeulen@me.com">tvermeulen@me.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The functionality of the `where` clause in `for` loops also already can be mimicked using `filter`. Wouldn’t we have to get ride of the `where` clause by that logic?<br>
<br>
&gt; The functionality being asked for here is already accepted for inclusion to Swift as a method on Sequence named `prefix(while:)` (SE-0045):<br>
&gt;<br>
&gt; `for element in array.prefix(while: { someCondition($0) }) { ... }`<br>
&gt; On Mon, Jun 6, 2016 at 14:31 T.J. Usiyan via swift-evolution&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>(mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>)&gt;wrote:<br>
&gt; &gt; (As I said, I can live with `while`. I am simply presenting a potential point of confusion.)<br>
&gt; &gt; You aren&#39;t evaluating the statements in the loop &#39;while&#39; the condition isn&#39;t met. The first time that the condition isn&#39;t met, evaluation of the loop stops. I get that this is technically true for the `while` construct but I suggest that the only reason that it works there is that &#39;stopping the first time that the condition isn&#39;t met&#39; *is* the construct. Here, we have a loop that we execute for each thing and we&#39;re tacking on/intermingling the `while` construct.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; On Mon, Jun 6, 2016 at 2:19 PM, Thorsten Seitz&lt;<a href="mailto:tseitz42@icloud.com" target="_blank">tseitz42@icloud.com</a>(mailto:<a href="mailto:tseitz42@icloud.com" target="_blank">tseitz42@icloud.com</a>)&gt;wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;Am 06.06.2016 um 19:43 schrieb Tim Vermeulen via swift-evolution&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>(mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>)&gt;:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;I also considered `until`, but it would be a bit confusing that `where` makes sure a condition is met, while `until` makes sure the condition isn’t met. I think `while` makes more sense because it corresponds to `break` in the same way that `where` corresponds to `continue`.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; That&#39;s a good argument! The only drawback is that `while` and `where` look quite similar at a glance.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; -Thorsten<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;&gt;`while`, to me, actually reads like it should do what `where` does.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;To me, `while` reads like it should stop the loop once the condition isn’t met, just like in a while loop.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;&gt;I hadn&#39;t thought about `while` in this regard but wouldn&#39;t `until` make more sense? `while`, to me, actually reads like it should do what `where` does. In any case, whether it is `while` or `where`, this seems like a reasonable feature in my opinion.<br>
&gt; &gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;TJ<br>
&gt; &gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;On Mon, Jun 6, 2016 at 5:15 AM, Tim Vermeulen via swift-evolution&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>(mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>)(mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>)&gt;wrote:<br>
&gt; &gt; &gt; &gt;&gt;&gt;We can already use a where clause in a for loop like this:<br>
&gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;&gt;for element in array where someCondition(element) {<br>
&gt; &gt; &gt; &gt;&gt;&gt;// …<br>
&gt; &gt; &gt; &gt;&gt;&gt;}<br>
&gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;&gt;which basically acts like<br>
&gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;&gt;for element in array {<br>
&gt; &gt; &gt; &gt;&gt;&gt;guard someCondition(element) else { continue }<br>
&gt; &gt; &gt; &gt;&gt;&gt;// …<br>
&gt; &gt; &gt; &gt;&gt;&gt;}<br>
&gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;&gt;Sometimes you want to break out of the loop when the condition isn’t met instead. I propose a while clause:<br>
&gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;&gt;for element in array while someCondition(element) {<br>
&gt; &gt; &gt; &gt;&gt;&gt;// …<br>
&gt; &gt; &gt; &gt;&gt;&gt;}<br>
&gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;&gt;which would be syntactic sugar for<br>
&gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;&gt;for element in array {<br>
&gt; &gt; &gt; &gt;&gt;&gt;guard someCondition(element) else { break }<br>
&gt; &gt; &gt; &gt;&gt;&gt;…<br>
&gt; &gt; &gt; &gt;&gt;&gt;}<br>
&gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt;&gt;&gt;I can see this particularly being useful if we have a sorted array and we already know that once the condition isn’t met, it won’t be met either for subsequent elements. Another use case could be an infinite sequence that we want to cut off somewhere (which is simply not possible using a where clause).<br>
&gt; &gt; &gt; &gt;&gt;&gt;_______________________________________________<br>
&gt; &gt; &gt; &gt;&gt;&gt;swift-evolution mailing list<br>
&gt; &gt; &gt; &gt;&gt;&gt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>(mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>)(mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>)<br>
&gt; &gt; &gt; &gt;&gt;&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>
&gt; &gt; &gt; &gt;_______________________________________________<br>
&gt; &gt; &gt; &gt;swift-evolution mailing list<br>
&gt; &gt; &gt; &gt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>(mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>)<br>
&gt; &gt; &gt; &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>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; swift-evolution mailing list<br>
&gt; &gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>(mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>)<br>
&gt; &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>
&gt;<br>
&gt;<br>
&gt; </blockquote></div>