<div dir="ltr"><div>Hi Richard - I'm curious about the coding style that you would advocate that uses it often. Can you give an example?</div><div><br></div><div>Personally I thought I would use \case when we introduced it, but in practice I find I want it rarely enough that I actually don't use it even in the places where it would be marginally shorter, purely because I'm optimising for code readability and I don't think \case helps (one could go either way on that though).<br></div><div><br></div><div>I do find MultiWayIf to be useful in practice - it looks nice, its meaning is obvious, and it helps code readability. But as I've said before I would never use it if it was called \cases :)</div><div><br></div><div>Cheers</div><div>Simon<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, 17 Jul 2021 at 03:29, Richard Eisenberg <<a href="mailto:lists@richarde.dev">lists@richarde.dev</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;">I'm struggling with this one, so I'll procrastinate by asking two clarifying questions:<div><br></div><div>1. Why does (2) not subsume MultiWayIf? The example in the MultiWayIf note seems to work just fine with syntax (2).</div><div><br></div><div>2. (2) and (4) seem to lose \case{}, which is useful in practice. Am I correct in saying that we'll lose \case{}?</div><div><br></div><div>I said I'm struggling, so I will explain why: I really want this new syntax, and I would advocate a coding style that uses it often. But I'm quite concerned about language bloat, and I don't like adding a new construct without also planning to remove redundant ones. I'm not sure how to balance these two desires. Perhaps a night's sleep will yield insight.</div><div><br></div><div>Richard<br><div><div><br><blockquote type="cite"><div>On Jul 16, 2021, at 11:21 AM, Simon Peyton Jones via ghc-steering-committee <<a href="mailto:ghc-steering-committee@haskell.org" target="_blank">ghc-steering-committee@haskell.org</a>> wrote:</div><br><div><div style="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;text-decoration:none"><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Friends<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Sorry to be slow on #302: multi-way lambda.   I was diverted by the POPL deadline.<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">I have not heard from Tom or Vitaly, I think, but I’ll take silence for agreement with the ballot list.<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">So it is time to vote!<span> </span><u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Please go<span> </span><a href="https://docs.google.com/document/d/1NDXk5kKcLtkqhkSNESAC9jVrBn3yqS_Qe1vacAIKnDs/edit?usp=sharing" style="color:rgb(5,99,193);text-decoration:underline" target="_blank">here</a>, and vote.<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Feel free to add pros/cons to the list on that page.<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><b><span style="color:red">Please vote by next Thursday, 22 July, at the latest</span></b>.  It’s a balance of judgement, for sure, not technically complicated.<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Simon<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><u></u> <u></u></p><div style="border-style:none none none solid;border-left:1.5pt solid blue;padding:0cm 0cm 0cm 4pt"><div><div style="border-style:solid none none;border-top-width:1pt;border-top-color:rgb(225,225,225);padding:3pt 0cm 0cm"><div style="margin:0cm;font-size:11pt;font-family:Calibri,sans-serif"><b><span lang="EN-US">From:</span></b><span lang="EN-US"><span> </span>Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color:rgb(5,99,193);text-decoration:underline" target="_blank">simonpj@microsoft.com</a>><span> </span><br><b>Sent:</b><span> </span>28 June 2021 10:45<br><b>To:</b><span> </span><a href="mailto:ghc-steering-committee@haskell.org" style="color:rgb(5,99,193);text-decoration:underline" target="_blank">ghc-steering-committee@haskell.org</a><br><b>Cc:</b><span> </span>Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color:rgb(5,99,193);text-decoration:underline" target="_blank">simonpj@microsoft.com</a>><br><b>Subject:</b><span> </span>RE: [ghc-steering-committee] Proposal #302: `\of` (New Shepherd: Simon PJ)<u></u><u></u></span></div></div></div><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><u></u> <u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Dear Steering Committee<span> </span><u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Two weeks ago I asked<u></u><u></u></p><ul style="margin-bottom:0cm;margin-top:0cm" type="circle"><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><b>Are there any other alternatives you<span> </span><i>strongly</i><span> </span>want on the ballot?<u></u><u></u></b></li></ul><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><u></u> <u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">I got these responses<u></u><u></u></p><ul style="margin-bottom:0cm;margin-top:0cm" type="disc"><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Joachim, Simon, Alejandro, Arnaud: nothing to add<u></u><u></u></li><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif;color:red">Vitaly, Eric, Tom, Richard, Vlad: no response<u></u><u></u></li></ul><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">I’d love to hear from the five of you, please.  I want to get a decision on this, and I can’t do that if I don’t hear from you.<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Thanks<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Simon<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><u></u> <u></u></p><div style="border-style:none none none solid;border-left:1.5pt solid blue;padding:0cm 0cm 0cm 4pt"><div><div style="border-style:solid none none;border-top-width:1pt;border-top-color:rgb(225,225,225);padding:3pt 0cm 0cm"><div style="margin:0cm;font-size:11pt;font-family:Calibri,sans-serif"><b><span lang="EN-US">From:</span></b><span lang="EN-US"><span> </span>ghc-steering-committee <<a href="mailto:ghc-steering-committee-bounces@haskell.org" style="color:rgb(5,99,193);text-decoration:underline" target="_blank">ghc-steering-committee-bounces@haskell.org</a>><span> </span><b>On Behalf Of<span> </span></b>Simon Peyton Jones via ghc-steering-committee<br><b>Sent:</b><span> </span>15 June 2021 13:52<br><b>To:</b><span> </span>Joachim Breitner <<a href="mailto:mail@joachim-breitner.de" style="color:rgb(5,99,193);text-decoration:underline" target="_blank">mail@joachim-breitner.de</a>>;<span> </span><a href="mailto:ghc-steering-committee@haskell.org" style="color:rgb(5,99,193);text-decoration:underline" target="_blank">ghc-steering-committee@haskell.org</a><br><b>Subject:</b><span> </span>Re: [ghc-steering-committee] Proposal #302: `\of` (New Shepherd: Simon PJ)<u></u><u></u></span></div></div></div><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><u></u> <u></u></p><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">|  I’d like to reassing shepherding of this one.<u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">| <span> </span><u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">|  It seems to be clear that we want “something like this”, there are many ways<u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">|  to skin the cat, so it comes down to opinion and what we need is a decision<u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">|  (or a call to votes). As with anything that’s possibly quite opinionated,<u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">|  it’s good to have an authorative voice, so in this case, Simon PJ.<u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">| <span> </span><u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">|  Simon, can you either come up with a “all things considered, I think this<u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">|  variant is the (narrowly) the best” recommendation or, alternative, a<u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New"">|  “please vote on the following options” verdict?<u></u><u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New""><u></u> <u></u></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New""><span style="font-family:Calibri,sans-serif">OK, to remind everyone<u></u><u></u></span></div><ul style="margin-bottom:0cm;margin-top:0cm" type="disc"><li style="margin:0cm;font-size:11pt;font-family:"Courier New""><span style="font-family:Calibri,sans-serif">Here is the proposal:<span> </span><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FJakobBruenker%2Fghc-proposals%2Fblob%2Fpatch-1%2Fproposals%2F0000-lambda-layout.md&data=04%7C01%7Csimonpj%40microsoft.com%7C4ae55d76732448a0c3a508d93a1955ed%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637604702751348160%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Hvxpaew8S333OX7IvW9cfD003mLSZxpjRdjOotGVZMA%3D&reserved=0" style="color:rgb(5,99,193);text-decoration:underline" target="_blank">https://github.com/JakobBruenker/ghc-proposals/blob/patch-1/proposals/0000-lambda-layout.md</a><u></u><u></u></span></li><li style="margin:0cm;font-size:11pt;font-family:"Courier New""><span style="font-family:Calibri,sans-serif">Here is the discussion:<span> </span><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fghc-proposals%2Fghc-proposals%2Fpull%2F302&data=04%7C01%7Csimonpj%40microsoft.com%7C4ae55d76732448a0c3a508d93a1955ed%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637604702751358154%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=1aYsUzlUaixOxNvW2%2FEkLNbImFD7yLBT273QFA76ZEI%3D&reserved=0" style="color:rgb(5,99,193);text-decoration:underline" target="_blank">https://github.com/ghc-proposals/ghc-proposals/pull/302</a><u></u><u></u></span></li></ul><div style="margin:0cm;font-size:11pt;font-family:"Courier New""><span style="font-family:Calibri,sans-serif"><u></u> <u></u></span></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New""><span style="font-family:Calibri,sans-serif">The basic idea is to extend to lambda all the facilities that you get with function definitions, especially multiple patterns and guards.   This seems clearly a good idea, whose only obstacle is syntactic.  There are no conceptual or specification challenges.  The only point at issue is that of concrete syntax.<u></u><u></u></span></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New""><span style="font-family:Calibri,sans-serif"><u></u> <u></u></span></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New""><span style="font-family:Calibri,sans-serif">The proposal offers four possible syntactic options.  After reviewing, I propose to discard (2) and (3) leaving these alternatives<u></u><u></u></span></div><div style="margin:0cm;font-size:11pt;font-family:"Courier New""><span style="font-family:Calibri,sans-serif"><u></u> <u></u></span></div><ul style="margin-bottom:0cm;margin-top:0cm" type="disc"><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><b>Option (1)   <span> </span></b>\cases { p1 p2 -> rhs1; q1 q2 -> rhs2 }<u></u><u></u></li></ul><ul style="margin-bottom:0cm;margin-top:0cm" type="disc"><ul style="margin-bottom:0cm;margin-top:0cm" type="circle"><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Lives alongside \case, but allows multiple patterns<u></u><u></u></li><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Other keywords are possible, but I think it must be a variant on \case<u></u><u></u></li></ul></ul><ul style="margin-bottom:0cm;margin-top:0cm" type="disc"><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><b>Option (4)</b>   Same, but use \case as the keyword<u></u><u></u></li></ul><ul style="margin-bottom:0cm;margin-top:0cm" type="disc"><ul style="margin-bottom:0cm;margin-top:0cm" type="circle"><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Incompatible with existing \case => extended transition period, unhappy users<u></u><u></u></li><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">\case { (Just x) -> rhs1; Nothing -> rhs2 } will require parens forever, which in the common case of a one argument lambda see clunky.<u></u><u></u></li></ul></ul><ul style="margin-bottom:0cm;margin-top:0cm" type="disc"><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><b>Option (X).</b>  Reject the proposal.<u></u><u></u></li></ul><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><u></u> <u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Personally I favour (1).   I’m relaxed about having multiple ways of saying the thing (think of let vs where), and I see no harm provided the two constructs look and behave the same.   I’ve decided I like \cases precisely because it’s the plural of \case, which is exactly what is going on.<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">I think we’ll end up having to vote on this, which is fine when it’s a judgement call about syntax.   But first:<u></u><u></u></p><ul style="margin-bottom:0cm;margin-top:0cm" type="circle"><li style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif"><b>Are there any other alternatives you<span> </span><i>strongly</i><span> </span>want on the ballot?<u></u><u></u></b></li></ul><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">I say “strongly” because I don’t want to open up a big new debate… we at the stage of trying to narrow options.<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Thanks<u></u><u></u></p><p class="MsoNormal" style="margin:6pt 0cm;font-size:11pt;font-family:Calibri,sans-serif">Simon<u></u><u></u></p></div></div></div><span style="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;text-decoration:none;float:none;display:inline">_______________________________________________</span><br style="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;text-decoration:none"><span style="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;text-decoration:none;float:none;display:inline">ghc-steering-committee mailing list</span><br style="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;text-decoration:none"><a href="mailto:ghc-steering-committee@haskell.org" style="color:rgb(5,99,193);text-decoration:underline;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" target="_blank">ghc-steering-committee@haskell.org</a><br style="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;text-decoration:none"><a href="https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee" style="color:rgb(5,99,193);text-decoration:underline;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" target="_blank">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a></div></blockquote></div><br></div></div></div>_______________________________________________<br>
ghc-steering-committee mailing list<br>
<a href="mailto:ghc-steering-committee@haskell.org" target="_blank">ghc-steering-committee@haskell.org</a><br>
<a href="https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee" rel="noreferrer" target="_blank">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><br>
</blockquote></div>