<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">On Mar 10, 2021, at 11:10 AM, Guy Steele <<a href="mailto:guy.steele@oracle.com" class="">guy.steele@oracle.com</a>> wrote:<br class=""><div><blockquote type="cite" class=""><br class="Apple-interchange-newline"><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Literata; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">But in principle it does matter for patterns, because while patterns arguably do not involve _evaluation_, they most certainly involve _execution_ of possibly user-written code.  If side effects can occur, the distinction arguably matters, and this is worth recognizing as we debate the design.</div></div></blockquote><div><br class=""></div>I don’t think user-written patterns can reliably exclude</div><div>side effects, and I think in some cases they will be useful</div><div>(to accumulate some sort of “log” on the side of matching</div><div>activity, perhaps to support backtracking).</div><div><br class=""></div><div>So let’s say that one way or another we have to specify</div><div>ordering of side effects patterns.  (Eww:  What about</div><div>class loading side effects for resolved class names?</div><div>Do we have to package type names in thunks for</div><div>the pattern runtime?  Please, no.)<br class=""><br class=""></div><div>Given nested patterns P(Q,R), if P fails then there’s no way</div><div>to execute Q.  If Q fails there’s no benefit to executing R,</div><div>although that would be possible to more closely emulate</div><div>unconditional evaluation of function parameters.  Is</div><div>there any reason to do this?  I think not.  And then</div><div>P(Q & R) also has no reason to execute R if Q fails.</div><div><br class=""></div><div>As I said to Remi, importing unconditional evaluation</div><div>rules from expressions into patterns makes no sense.</div><div><br class=""></div><div>As Brian said, pattern-& is as similar to type-&</div><div>to expression-&.</div><div><br class=""></div></body></html>