<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Upon accepting SE-0099, the core team is removing `where` clauses from condition clauses, writing "<span style="font-family: Palatino-Roman;" class="">the 'where' keyword can be retired from its purpose as a boolean condition introducer."&nbsp;</span><div class=""><span style="font-family: Palatino-Roman;" class=""><br class=""></span></div><div class=""><span style="font-family: Palatino-Roman;" class="">Inspiried by Xiaodi Wu, I now propose removing `where` clauses from `for in` loops, where they are better expressed (and read) as guard conditions.&nbsp;</span><div class=""><span style="font-family: Palatino-Roman;" class=""><br class=""></span></div><div class=""><span style="font-family: Palatino-Roman;" class="">Guard conditions can `continue` (mimicking the current use of `where`) or `break` (introducing the recently pitched `while` behavior). &nbsp;This limits the current situation where people new to the language expect `while` behavior and expect termination rather than sequence filtering. Removing `where` from for-in loops</span><span style="font-family: Palatino-Roman;" class="">&nbsp;benefits these new users, reduces cognitive burden for all users, and enhances readability and predictability.</span><div class=""><font face="Palatino-Roman" class=""><br class=""></font></div><div class=""><font face="Palatino-Roman" class="">I do not believe the same benefit would accrue in retiring `where` from&nbsp;</font><span style="font-family: Palatino-Roman;" class="">`catch` clauses and `switch` statement cases. One can argue that there are inherent flaws in both situations: unlike generic constraints, nothing prevents semantic disjunction in their `where` clauses. That said, both measurably benefit from their `where` clauses in the current grammar:</span></div><div class=""><div class=""><span style="font-family: Palatino-Roman;" class=""><br class=""></span></div><div class=""><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; white-space: pre;">case_item_list</span><span style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; white-space: pre; background-color: rgb(255, 255, 255);" class=""> : pattern where_clause? | pattern where_clause? </span><span class="pl-s" style="box-sizing: border-box; color: rgb(24, 54, 145); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; white-space: pre;"><span class="pl-pds" style="box-sizing: border-box;">'</span>,<span class="pl-pds" style="box-sizing: border-box;">'</span></span><span style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; white-space: pre; background-color: rgb(255, 255, 255);" class=""> case_item_list</span></div><div class=""><div class=""><span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; white-space: pre;">catch_clause</span><span style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; white-space: pre; background-color: rgb(255, 255, 255);" class=""> : </span><span class="pl-s" style="box-sizing: border-box; color: rgb(24, 54, 145); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; white-space: pre;"><span class="pl-pds" style="box-sizing: border-box;">'</span>catch<span class="pl-pds" style="box-sizing: border-box;">'</span></span><span style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; white-space: pre; background-color: rgb(255, 255, 255);" class=""> pattern? where_clause? code_block</span></div></div><div class=""><span style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; white-space: pre; background-color: rgb(255, 255, 255);" class=""><br class=""></span></div><div class=""><span style="font-family: Palatino-Roman;" class="">Case item lists allow comma-separated patterns in a single case statement. The only way to express a related Boolean assertion is through `where`.</span></div><div class=""><span style="font-family: Palatino-Roman;" class="">Catch clauses do not allow multiple patterns but I cannot think of an improved way to associate an assertion than `where`.</span></div><div class=""><br class=""></div><div class="">-- E</div></div></div><div class=""><br class=""></div><div class=""><br class=""></div></div></body></html>