<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
.MsoPapDefault
        {mso-style-type:export-only;
        margin-top:6.0pt;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:0cm;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:36.0pt">
It is quite interesting looking at the other votes, as some of them seem to be exactly the opposite of what I think should be done :-) <o:p></o:p></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Indeed.  I’m intrigued by how strenuously you dislike C6 (you would prefer to reject the entire proposal than have C6), even though C6 is but a mild variation of qualified names.  Would you like
 to say why?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Simon<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Iavor Diatchki <iavor.diatchki@gmail.com>
<br>
<b>Sent:</b> 24 March 2020 17:32<br>
<b>To:</b> Cale Gibbard <cgibbard@gmail.com><br>
<b>Cc:</b> Simon Peyton Jones <simonpj@microsoft.com>; ghc-steering-committee <ghc-steering-committee@haskell.org><br>
<b>Subject:</b> Re: [ghc-steering-committee] Record dot syntax: time to vote<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
I just added my vote to the document, apologies for the delay.    It is quite interesting looking at the other votes, as some of them seem to be exactly the opposite of what I think should be done :-) <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
Hope everyone is staying healthy!<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
Cheers,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
-Iavor<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
On Thu, Mar 19, 2020 at 3:41 PM Cale Gibbard <<a href="mailto:cgibbard@gmail.com">cgibbard@gmail.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
On Thu, 19 Mar 2020 at 07:33, Simon Peyton Jones via<br>
ghc-steering-committee <<a href="mailto:ghc-steering-committee@haskell.org" target="_blank">ghc-steering-committee@haskell.org</a>> wrote:<br>
> Overall, I strongly urge that we accept the proposal in some form; that is, we should not do (C1).  I have been unhappy with GHC's story for records for two decades.  (E.g. Lightweight extensible records for Haskell, Haskell Workshop, Paris 1999.)  But the
 design space is so complicated that we never found something that felt "obviously right".  So we did nothing drastic, and I think that was right.<br>
<br>
I'm not sure any of these proposed options feels "obviously right"<br>
either. The fact that we're voting between many different ways to<br>
interpret the same syntax sugar should make it clear that this isn't<br>
so obvious.<br>
<br>
> But there was incremental progress, sketched here:<br>
><br>
> DuplicateRecordFields lets you have multiple records with the same field name.<br>
> The HasField class lets us define overloaded record selection and update functions.<br>
><br>
> The proposal we are now discussing has no type-system component; it is only about syntactic sugar, allowing you to use dot-notation for field selection.  (Various extensions about syntax for update were discussed, but no longer form part of the proposal;
 what is left is the core.)<br>
><br>
> I really think this change has vastly higher impact and utility than many other accepted proposals.  I know that some members of the committee differ from this view; that's fair enough.<br>
<br>
While I'd agree it has vastly higher impact that a lot of accepted<br>
proposals, I'm not sure that impact is actually in the direction of<br>
making it easier to read and understand programs that are written in<br>
Haskell. It's syntactic sugar that we've pretty reasonably done<br>
without for a long time. Piling on yet another option for how to<br>
select fields from records amidst a sea of libraries that already help<br>
with this in various ways that go far beyond the capabilities of the<br>
syntax sugar that's proposed here seems a bit strange to me at this<br>
point. It feels like the complaint is "but I want to type exactly this<br>
string of characters and no other will do", which seems kind of absurd<br>
to me, but other languages exist in the world, and DAML for instance<br>
is a thing which exists now and should satisfy those people. I don't<br>
particularly get why it's of great importance for Haskell to support<br>
accessing fields with *this* syntax, and not dozens of<br>
almost-equivalent syntaxes that one could already achieve.<br>
<br>
If there were no confusion over what the infix dot meant and how it<br>
interacted with the rest of Haskell's syntax, then maybe there<br>
wouldn't be anything much to be unhappy about in adding in this extra<br>
bit of sugar. But it is manifestly confusing or else we wouldn't be<br>
having this vote and so many clarifications about what consequences<br>
the options had wouldn't have been needed. All these syntactic<br>
questions that have been asked and debated in this thread are<br>
something that every beginner will have to contend with, and all the<br>
consequences of whatever option is selected are something every expert<br>
will have to live with. I don't feel that it's worth the extremely<br>
meagre benefit of the difference between this and just opting to use<br>
lens or otherwise just using the already existing mechanisms.<br>
<br>
Frankly, I still mostly use Haskell's ordinary field accessors unless<br>
there's a real need for abstracting over a lens (at which point I'll<br>
switch to using Ed's lens library), or just abstracting over field<br>
access (at which point I'll probably define my own class), and<br>
DuplicateRecordFields and the associated machinery is not something<br>
that I have had a whole lot of love for in the first place.<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%7C402e189bd282458f6e2c08d7d0195732%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637206679602452262&sdata=AKJugFGwXrHJLrLEFU8xioCtibCWRnOml%2FWzNv7zzr0%3D&reserved=0" target="_blank">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</body>
</html>