<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Feb 12, 2020 at 12:05 PM Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com">simonpj@microsoft.com</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 lang="EN-GB">
<div class="gmail-m_-2303495793196531323WordSection1">
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:36pt"><br></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Yes, but `f M.x` and `(f M).x` mean very different things too.  Nobody has any trouble with parsing M.x as a single lexeme.   To be consistent with this approach, we should require `f (M.x)` for qualified names.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal" style="margin-left:36pt">Both option (4) and option (5) require just one new lexeme .X, and the rest can be handled in the parser. <u></u><u></u></p>
<p class="MsoNormal"><u></u><br></p></div></div></blockquote><div><br></div><div>I don't really understand your example:  why would a programmer expect `f M.x` and `(f M).x` to mean the same thing?  Or when would you want to perform this transformation on an existing program?  It doesn't even make sense to apply a function to a module name...</div><div><br></div><div>This is not at all the case with record selection:  I can absolutely see myself writing the expression `f r.x`, and later decide that maybe I want to apply a function to `r` before selecting:  `f (g r).x`.     Except that with proposal (6) this actually means something very different, and *at best* I'd get a confusing type error, and at worst, I'd silently get a completely different behavior. </div><div><br></div><div>-Iavor</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-GB"><div class="gmail-m_-2303495793196531323WordSection1"><p class="MsoNormal"></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Iavor Diatchki <<a href="mailto:iavor.diatchki@gmail.com" target="_blank">iavor.diatchki@gmail.com</a>>
<br>
<b>Sent:</b> 12 February 2020 17:58<br>
<b>To:</b> Simon Marlow <<a href="mailto:marlowsd@gmail.com" target="_blank">marlowsd@gmail.com</a>><br>
<b>Cc:</b> Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>>; ghc-steering-committee <<a href="mailto:ghc-steering-committee@haskell.org" target="_blank">ghc-steering-committee@haskell.org</a>>; Joachim Breitner <<a href="mailto:mail@joachim-breitner.de" target="_blank">mail@joachim-breitner.de</a>><br>
<b>Subject:</b> Re: [ghc-steering-committee] Record dot notation<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
Both option (4) and option (5) require just one new lexeme .X, and the rest can be handled in the parser.  The difference between them is the precedence of selection, 4 has higher precedence than application (just like record update), while 5 has the same precedence as
 application.  Most commonly, this would show up in examples like `f x.y`: with (4) this means `f (x.y)` with (5) this means `(f x).y`.<u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
Simon PJ, why do we need the special case for option (6), when it seems option (4) does the same thing in a simpler way?<u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
I am strongly against the new option (6) because `f x.y` and `f (g x).y` mean very different things, and being able to name and abstract expressions is one of the big selling point of Haskell.  Also having a single consistent rule is a lot easier to teach and
 read, there really is no need for a special case here.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
-Iavor<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
On Wed, Feb 12, 2020 at 8:44 AM Simon Marlow <<a href="mailto:marlowsd@gmail.com" target="_blank">marlowsd@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
On Wed, 12 Feb 2020 at 14:53, Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>> wrote:<u></u><u></u></p>
</div>
<div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal">Don’t forget option (6): like (5) but treat r.x as a lexeme.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">I find it hard to justify a language in which<u></u><u></u></p>
<p class="MsoNormal">               f M.x     means      f (M.x)<u></u><u></u></p>
<p class="MsoNormal">but         f m.x     means      (f m).x<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">especially when the “.” means, in both cases, “take the x component of the thing on the left”.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">So here I’m leaning even harder on the connection with qualified names: let’s simply be consistent with that.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">I’m quite content to follow (5) on the meaning of
<u></u><u></u></p>
<p class="MsoNormal">               f (g 3).x<u></u><u></u></p>
<p class="MsoNormal">That is, it means the same as (f (g 3)   .x), namely  (f (g 3)).x<u></u><u></u></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Yes OK, I think that's reasonable. (I hadn't digested your earlier message proposing this properly, but I went back and re-read it just now.)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I can imagine explaining that to someone - there's a straightforward lexical syntax, and the context-free grammar is similar to the rules for function application.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Joachim what do you think?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Cheers<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Simon<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">But I’m very keen on maintaining consistency with qualified names when the thing on the LHS is a token (or dotted chain thereof.)<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Does anyone else have an alternative beyond 1-6 that they want to put forward?<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Simon<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div style="border-top:none currentcolor;border-right:none currentcolor;border-bottom:none currentcolor;border-left:1.5pt solid blue;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-right:none currentcolor;border-bottom:none currentcolor;border-left:none currentcolor;border-top:1pt solid currentcolor;padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> ghc-steering-committee <<a href="mailto:ghc-steering-committee-bounces@haskell.org" target="_blank">ghc-steering-committee-bounces@haskell.org</a>>
<b>On Behalf Of </b>Simon Marlow<br>
<b>Sent:</b> 12 February 2020 11:21<br>
<b>To:</b> Richard Eisenberg <<a href="mailto:rae@richarde.dev" target="_blank">rae@richarde.dev</a>><br>
<b>Cc:</b> ghc-steering-committee <<a href="mailto:ghc-steering-committee@haskell.org" target="_blank">ghc-steering-committee@haskell.org</a>>; Joachim Breitner <<a href="mailto:mail@joachim-breitner.de" target="_blank">mail@joachim-breitner.de</a>><br>
<b>Subject:</b> Re: [ghc-steering-committee] Record dot notation</span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:6pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6pt">On Mon, 10 Feb 2020 at 14:15, Richard Eisenberg <<a href="mailto:rae@richarde.dev" target="_blank">rae@richarde.dev</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none currentcolor;border-right:none currentcolor;border-bottom:none currentcolor;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<p class="MsoNormal" style="margin-bottom:6pt">Upon careful consideration, I think the whitespace concerns here are somewhat ill-founded.<u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:6pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6pt">First, please see <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fghc-proposals%2Fghc-proposals%2Fblob%2Fmaster%2Fproposals%2F0229-whitespace-bang-patterns.rst%23proposed-change-specification&data=02%7C01%7Csimonpj%40microsoft.com%7C4cb625c7d60d41ef39c108d7afe530a7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637171271230291847&sdata=rQAiIpdtu%2FQQkZvAXxxAZPFcx%2Fmif4Tv2EFG3fiEiio%3D&reserved=0" target="_blank">https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0229-whitespace-bang-patterns.rst#proposed-change-specification</a>,
 where (among other points), a careful description of "loose infix" vs "prefix" vs "suffix" vs "tight infix" is discussed. Here is a set of examples:<u></u><u></u></p>
</div>
<div>
<pre>a ! b   -- a loose infix occurrence<u></u><u></u></pre>
<pre>a!b     -- a tight infix occurrence<u></u><u></u></pre>
<pre>a !b    -- a prefix occurrence<u></u><u></u></pre>
<pre>a! b    -- a suffix occurrence<u></u><u></u></pre>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal">Yes and I was not very keen on that proposal (my concerns are on the discussion thread).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border-top:none currentcolor;border-right:none currentcolor;border-bottom:none currentcolor;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<div>
<p class="MsoNormal">This distinction is *not* just made by example, but that proposal (which has been accepted) defines these precisely. So, the comments on this thread about what counts as a naked
 selector are addressed: a naked selector is one where the dot is a prefix occurrence.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Other whitespace-wariness comes from worrying about the distinction between prefix and tight infix occurrences. That is, should we differentiate between the interpretation of `f
 r.x` and `f r .x`. Yet in all versions of any of this, we differentiate between loose infix and the others. Thus there is *always* whitespace-sensitivity around dot. Note that this is true, as Simon PJ pointed out, regardless of this proposal, where a tight-infix
 usage of a dot with a capitalized identifier on the left is taken as a module qualification. In all of its versions, this proposal *increases* the whitespace sensitivity, by further distinguishing between prefix occurrences of dot and other usages.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Let's compare options 3 and 5 with this analysis then:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Option 3:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">loose-infix: whatever (.) is in scope<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">tight-infix:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  - if left-hand is a capitalized identifier: module qualification<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  - otherwise: record selection, binding tighter than function application<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">prefix: postfix record selection, binding like function application<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">suffix: presumably, whatever (.) is in scope<u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
<blockquote style="border-top:none currentcolor;border-right:none currentcolor;border-bottom:none currentcolor;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Option 5:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">loose-infix: whatever (.) is in scope<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">tight-infix:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> - if left-hand is a capitalized identifier: module qualification<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> - otherwise: postfix record selection, binding like function application<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">prefix: postfix record selection, binding like function application<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">suffix: presumably, whatever (.) is in scope<u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">That's a good summary - but note that under Option 5 tight-infix and prefix are the same, modulo the qualified-identifier case, and this is the key difference. What I wanted to
 avoid was having to use the language of tight-infix vs. prefix AT ALL in understanding how record selection syntax works, and (5) achieves that whereas (3) doesn't.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Under option 5 we get one new lexeme:
<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">   .<varid><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">and everything else can be handled at the context-free grammar level. This is a nice minimal addition to the language. We don't have to invoke the mess that is proposal #229, which
 was forced upon us because BangPatterns and TypeApplications made the handling of (!) and (@) so complicated. If we don't have to do the same to (.), I believe we should take the opportunity to avoid it.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Cheers<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Simon<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border-top:none currentcolor;border-right:none currentcolor;border-bottom:none currentcolor;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">My point here is that option (5) is no more or less whitespace sensitive than option (3). Both need the same cases to figure what the period character in your code means. I think
 this is why Simon PJ has keyed this part of the debate to module qualification: that existing feature (not under debate) essentially breaks the symmetry here, meaning that we have more room to work with without breaking symmetry further.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">My vote is thus:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">3 > 5 > 2 > 4 > 1<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Other points of motivation:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">- Despite my argument above, I see the merit in (5). I just think that an argument "we don't want dot to be whitespace-sensitive" isn't really effective.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">- I want to accept this proposal. We're not going to get another go at this.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">- I really don't like the way record-update binds, and (4) reminds me too much of that.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Richard<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12pt"><u></u> <u></u></p>
<blockquote style="margin-top:5pt;margin-bottom:5pt">
<div>
<p class="MsoNormal">On Feb 10, 2020, at 9:58 AM, Simon Marlow <<a href="mailto:marlowsd@gmail.com" target="_blank">marlowsd@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">On Fri, 7 Feb 2020 at 22:37, Joachim Breitner <<a href="mailto:mail@joachim-breitner.de" target="_blank">mail@joachim-breitner.de</a>>
 wrote:</span><u></u><u></u></p>
</div>
<div>
<blockquote style="border-top:none currentcolor;border-right:none currentcolor;border-bottom:none currentcolor;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"><br>
I really would prefer a design where all these questions do not even<br>
need to be asked…</span><u></u><u></u></p>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">Me too. Also what about (.x) vs. ( .x), are those the same?</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<blockquote style="border-top:none currentcolor;border-right:none currentcolor;border-bottom:none currentcolor;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">So I think to have the full picture, we need the following option as<br>
well on the ballot:<br>
<br>
 5. .x is a postfix operator, binding exactly like application,<br>
    whether it is naked or not.<br>
    (This is option 3, but without the whitespace-sensitivity.)</span><u></u><u></u></p>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">[...]</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<blockquote style="border-top:none currentcolor;border-right:none currentcolor;border-bottom:none currentcolor;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">Anyways, now for my opinion: Assuming no more options are added, my<br>
ranking will be<br>
<br>
  5 > 4 > 2 > 1 > 3<br>
<br>
This puts first the two variants where .x behaves like an existing<br>
language feature (either like function application or like record<br>
updates), has no whitespace sensitivity, and follows existing languages<br>
precedence (JS and OCaml, resp.).<br>
Then the compromise solution that simply forbids putting spaces before<br>
.x (so at least the program doesn't change semantics silently).<br>
I dislike variant 3, which adds a _new_ special rule, and where adding<br>
a single space can change the meaning of the program, so I rank that<br>
last.</span><u></u><u></u></p>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">I'm also against whitespace-sensitivity and I lean towards this ordering too.</span><u></u><u></u></p>
</div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">But I'm going with:</span><u></u><u></u></p>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">5 > 2 > 1 > 4 > 3</span><u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">Rationale: (5) seems the easiest to explain and has the fewest special cases, yet covers the use-cases we're interested
 in. Beyond that I want to be conservative because I find it hard to predict the ramifications of the more-complex alternatives 4/3, so I've put 2/1 ahead of those. I've made my peace with the current record selection syntax binding more tightly than application,
 and indeed I often rely on it to avoid a $, so I'm OK with 4 over 3.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">Cheers</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">Simon</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"> </span><u></u><u></u></p>
</div>
<blockquote style="border-top:none currentcolor;border-right:none currentcolor;border-bottom:none currentcolor;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif"><br>
<br>
Cheers,<br>
Joachim<br>
<br>
<br>
PS, because its on my mind, and just for fun:<br>
<br>
Under variant 3, both foo1 and foo2 typecheck, they do quite different<br>
things (well, one loops).<br>
<br>
  data Stream a = Stream { val :: a, next :: Stream a }<br>
<br>
  foo1 f s = Stream (s.val) (foo1 (fmap f s).next)<br>
  foo2 f s = Stream (s.val) (foo2 (fmap f s) .next)<br>
<br>
<br>
-- <br>
Joachim Breitner<br>
  <a href="mailto:mail@joachim-breitner.de" target="_blank">mail@joachim-breitner.de</a><br>
  <a href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.joachim-breitner.de%2F&data=02%7C01%7Csimonpj%40microsoft.com%7C4cb625c7d60d41ef39c108d7afe530a7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637171271230291847&sdata=TKA2cWWKUhpyBrtctUcmOPaZp1QhJiRQ0i6TxtOch00%3D&reserved=0" target="_blank">http://www.joachim-breitner.de/</a><br>
<br>
<br>
_______________________________________________<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://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-committee&data=02%7C01%7Csimonpj%40microsoft.com%7C4cb625c7d60d41ef39c108d7afe530a7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637171271230301841&sdata=erh%2FhqBpSM%2FJZUpaF8yEYBew2iOZwwRA%2FeIQPfHanj0%3D&reserved=0" target="_blank">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a></span><u></u><u></u></p>
</blockquote>
</div>
</div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">_______________________________________________<br>
ghc-steering-committee mailing list<br>
</span><a href="mailto:ghc-steering-committee@haskell.org" target="_blank"><span style="font-size:9pt;font-family:Helvetica,sans-serif">ghc-steering-committee@haskell.org</span></a><span style="font-size:9pt;font-family:Helvetica,sans-serif"><br>
</span><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-committee&data=02%7C01%7Csimonpj%40microsoft.com%7C4cb625c7d60d41ef39c108d7afe530a7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637171271230301841&sdata=erh%2FhqBpSM%2FJZUpaF8yEYBew2iOZwwRA%2FeIQPfHanj0%3D&reserved=0" target="_blank"><span style="font-size:9pt;font-family:Helvetica,sans-serif">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</span></a><u></u><u></u></p>
</div>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
<p class="MsoNormal">_______________________________________________<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://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-committee&data=02%7C01%7Csimonpj%40microsoft.com%7C4cb625c7d60d41ef39c108d7afe530a7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637171271230311834&sdata=OnGpdNP9%2B2%2Bu%2F77u63ezfYnZtbTqsvkQbXH2Dx8I9ug%3D&reserved=0" target="_blank">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><u></u><u></u></p>
</blockquote>
</div>
</div>
</div>
</div>

</blockquote></div></div>