<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="">I'm struggling with this one, so I'll procrastinate by asking two clarifying questions:<div class=""><br class=""></div><div class="">1. Why does (2) not subsume MultiWayIf? The example in the MultiWayIf note seems to work just fine with syntax (2).</div><div class=""><br class=""></div><div class="">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 class=""><br class=""></div><div class="">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 class=""><br class=""></div><div class="">Richard<br class=""><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jul 16, 2021, at 11:21 AM, Simon Peyton Jones via ghc-steering-committee <<a href="mailto:ghc-steering-committee@haskell.org" class="">ghc-steering-committee@haskell.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="WordSection1" style="page: WordSection1; 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;"><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Friends<o:p class=""></o:p></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.<o:p class=""></o:p></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.<o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">So it is time to vote!<span class="Apple-converted-space"> </span><o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Please go<span class="Apple-converted-space"> </span><a href="https://docs.google.com/document/d/1NDXk5kKcLtkqhkSNESAC9jVrBn3yqS_Qe1vacAIKnDs/edit?usp=sharing" style="color: rgb(5, 99, 193); text-decoration: underline;" class="">here</a>, and vote.<o:p class=""></o:p></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.<o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><b class=""><span style="color: red;" class="">Please vote by next Thursday, 22 July, at the latest</span></b>. It’s a balance of judgement, for sure, not technically complicated.<o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Simon<o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><o:p class=""> </o:p></p><div style="border-style: none none none solid; border-left-width: 1.5pt; border-left-color: blue; padding: 0cm 0cm 0cm 4pt;" class=""><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0cm 0cm;" class=""><div style="margin: 0cm; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><b class=""><span lang="EN-US" class="">From:</span></b><span lang="EN-US" class=""><span class="Apple-converted-space"> </span>Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color: rgb(5, 99, 193); text-decoration: underline;" class="">simonpj@microsoft.com</a>><span class="Apple-converted-space"> </span><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>28 June 2021 10:45<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span><a href="mailto:ghc-steering-committee@haskell.org" style="color: rgb(5, 99, 193); text-decoration: underline;" class="">ghc-steering-committee@haskell.org</a><br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span>Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color: rgb(5, 99, 193); text-decoration: underline;" class="">simonpj@microsoft.com</a>><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>RE: [ghc-steering-committee] Proposal #302: `\of` (New Shepherd: Simon PJ)<o:p class=""></o:p></span></div></div></div><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><o:p class=""> </o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Dear Steering Committee<span class="Apple-converted-space"> </span><o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Two weeks ago I asked<o:p class=""></o:p></p><ul type="circle" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><li class="MsoListParagraph" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><b class="">Are there any other alternatives you<span class="Apple-converted-space"> </span><i class="">strongly</i><span class="Apple-converted-space"> </span>want on the ballot?<o:p class=""></o:p></b></li></ul><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><o:p class=""> </o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">I got these responses<o:p class=""></o:p></p><ul type="disc" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><li class="MsoListParagraph" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Joachim, Simon, Alejandro, Arnaud: nothing to add<o:p class=""></o:p></li><li class="MsoListParagraph" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; color: red;">Vitaly, Eric, Tom, Richard, Vlad: no response<o:p class=""></o:p></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.<o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Thanks<o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Simon<o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><o:p class=""> </o:p></p><div style="border-style: none none none solid; border-left-width: 1.5pt; border-left-color: blue; padding: 0cm 0cm 0cm 4pt;" class=""><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0cm 0cm;" class=""><div style="margin: 0cm; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><b class=""><span lang="EN-US" class="">From:</span></b><span lang="EN-US" class=""><span class="Apple-converted-space"> </span>ghc-steering-committee <<a href="mailto:ghc-steering-committee-bounces@haskell.org" style="color: rgb(5, 99, 193); text-decoration: underline;" class="">ghc-steering-committee-bounces@haskell.org</a>><span class="Apple-converted-space"> </span><b class="">On Behalf Of<span class="Apple-converted-space"> </span></b>Simon Peyton Jones via ghc-steering-committee<br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>15 June 2021 13:52<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span>Joachim Breitner <<a href="mailto:mail@joachim-breitner.de" style="color: rgb(5, 99, 193); text-decoration: underline;" class="">mail@joachim-breitner.de</a>>;<span class="Apple-converted-space"> </span><a href="mailto:ghc-steering-committee@haskell.org" style="color: rgb(5, 99, 193); text-decoration: underline;" class="">ghc-steering-committee@haskell.org</a><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>Re: [ghc-steering-committee] Proposal #302: `\of` (New Shepherd: Simon PJ)<o:p class=""></o:p></span></div></div></div><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><o:p class=""> </o:p></p><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| I’d like to reassing shepherding of this one.<o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| <span class="Apple-converted-space"> </span><o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| It seems to be clear that we want “something like this”, there are many ways<o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| to skin the cat, so it comes down to opinion and what we need is a decision<o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| (or a call to votes). As with anything that’s possibly quite opinionated,<o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| it’s good to have an authorative voice, so in this case, Simon PJ.<o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| <span class="Apple-converted-space"> </span><o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| Simon, can you either come up with a “all things considered, I think this<o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| variant is the (narrowly) the best” recommendation or, alternative, a<o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class="">| “please vote on the following options” verdict?<o:p class=""></o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class=""><o:p class=""> </o:p></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class=""><span style="font-family: Calibri, sans-serif;" class="">OK, to remind everyone<o:p class=""></o:p></span></div><ul type="disc" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><li class="MsoPlainText" style="margin: 0cm; font-size: 11pt; font-family: "Courier New";"><span style="font-family: Calibri, sans-serif;" class="">Here is the proposal:<span class="Apple-converted-space"> </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;" class="">https://github.com/JakobBruenker/ghc-proposals/blob/patch-1/proposals/0000-lambda-layout.md</a><o:p class=""></o:p></span></li><li class="MsoPlainText" style="margin: 0cm; font-size: 11pt; font-family: "Courier New";"><span style="font-family: Calibri, sans-serif;" class="">Here is the discussion:<span class="Apple-converted-space"> </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;" class="">https://github.com/ghc-proposals/ghc-proposals/pull/302</a><o:p class=""></o:p></span></li></ul><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class=""><span style="font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class=""><span style="font-family: Calibri, sans-serif;" class="">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.<o:p class=""></o:p></span></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class=""><span style="font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class=""><span style="font-family: Calibri, sans-serif;" class="">The proposal offers four possible syntactic options. After reviewing, I propose to discard (2) and (3) leaving these alternatives<o:p class=""></o:p></span></div><div style="margin: 0cm; font-size: 11pt; font-family: "Courier New";" class=""><span style="font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></span></div><ul type="disc" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><li class="MsoListParagraph" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><b class="">Option (1) <span class="Apple-converted-space"> </span></b>\cases { p1 p2 -> rhs1; q1 q2 -> rhs2 }<o:p class=""></o:p></li></ul><ul type="disc" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><ul type="circle" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><li class="MsoListParagraph" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Lives alongside \case, but allows multiple patterns<o:p class=""></o:p></li><li class="MsoListParagraph" 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<o:p class=""></o:p></li></ul></ul><ul type="disc" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><li class="MsoListParagraph" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><b class="">Option (4)</b> Same, but use \case as the keyword<o:p class=""></o:p></li></ul><ul type="disc" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><ul type="circle" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><li class="MsoListParagraph" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Incompatible with existing \case => extended transition period, unhappy users<o:p class=""></o:p></li><li class="MsoListParagraph" 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.<o:p class=""></o:p></li></ul></ul><ul type="disc" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><li class="MsoListParagraph" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><b class="">Option (X).</b> Reject the proposal.<o:p class=""></o:p></li></ul><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><o:p class=""> </o:p></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.<o:p class=""></o:p></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:<o:p class=""></o:p></p><ul type="circle" style="margin-bottom: 0cm; margin-top: 0cm;" class=""><li class="MsoListParagraph" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;"><b class="">Are there any other alternatives you<span class="Apple-converted-space"> </span><i class="">strongly</i><span class="Apple-converted-space"> </span>want on the ballot?<o:p class=""></o:p></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.<o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Thanks<o:p class=""></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif;">Simon<o:p class=""></o:p></p></div></div></div><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="">_______________________________________________</span><br 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;" 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="">ghc-steering-committee mailing list</span><br 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;" class=""><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; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">ghc-steering-committee@haskell.org</a><br 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;" class=""><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; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a></div></blockquote></div><br class=""></div></div></body></html>