<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">This whole area is clearly somewhat troublesome:<div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Sep 10, 2020, at 12:05 PM, Iavor Diatchki <<a href="mailto:iavor.diatchki@gmail.com" class="">iavor.diatchki@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; 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; float: none; display: inline !important;" class="">3. nested bang patterns in pattern bindings should count as "uses" of the value and therefore should be strict. For example if I write `let ( !x, !y ) = undefined in ()`, I think this should be equivalent to `let (x,y) = undefined in x `seq` y `seq` ()`. With the current behavior the bang patterns don't do anything, while my guess would be that most people would expect the suggested behavior instead. As usual, we should not allow that at the top level.</span></div></blockquote></div><br class=""></div><div class="">This isn't quite right.</div><div class=""><br class=""></div><div class="">Consider</div><div class=""><br class=""></div><div class=""><div class=""></div></div><blockquote type="cite" class=""><div class=""><div class="">ex0 = let ( !x, !y ) = undefined in ()</div><div class="">ex1 = let ( !x, !y ) = (5, undefined) in x</div><div class="">ex2 = let ( !x, y ) = (5, undefined) in x</div></div></blockquote><div class=""><br class=""></div><div class="">ex0 converges, because let-bindings are lazy by default.</div><div class="">ex1 diverges, because the bang on y means that, when the patten-match happens at all, x and y are bound strictly. So bangs *do* matter in nested patterns within pattern bindings. By contrast, ex2 converges.</div><div class=""><br class=""></div><div class="">Again, I'm not arguing in favor of the current behavior, but I want to make sure we're all as informed as possible in this debate.</div><div class=""><br class=""></div><div class="">Richard</div></body></html>