[ghc-steering-committee] RecordDotSyntax proposal: next steps

Simon Peyton Jones simonpj at microsoft.com
Mon Mar 16 16:59:57 UTC 2020


Thanks Cale.  You’ve made helpful clarifications on the Google doc.

I think I understand the proposal now.

Simon

|  -----Original Message-----
|  From: Cale Gibbard <cgibbard at gmail.com>
|  Sent: 16 March 2020 14:56
|  To: Simon Peyton Jones <simonpj at microsoft.com>
|  Cc: Christopher Allen <cma at bitemyapp.com>; Simon Marlow
|  <marlowsd at gmail.com>; ghc-steering-committee <ghc-steering-
|  committee at haskell.org>
|  Subject: Re: RecordDotSyntax proposal: next steps
|  
|  On Mon, 16 Mar 2020 at 10:28, Simon Peyton Jones
|  <simonpj at microsoft.com> wrote:
|  >
|  > |  Actually, I just changed my mind, maybe there's one other option
|  that
|  > |  should make it in as a second option in case we're unable to kill
|  this
|  > |  proposal: none of the ambiguous expressions that are taken as
|  examples
|  > |  there is valid. Take the record-selection-dot to be at the same
|  level
|  > |  of precedence as function application, and therefore it must be
|  > |  parenthesized when used alongside function applications.
|  >
|  > Cale, if you'd like to add (C7) by all means do so.  But I'm not
|  clear what you have in mind.  I understand that all the examples in
|  (C2-6) would be illegal.  But what about
|  >
|  >         r .x .y
|  >         r.x.y
|  >         r .x.y
|  >         r.x .y
|  
|  Of those, I think only r.x.y should be legal, as I can't guess what
|  the rest would mean. Of course, you could add parens in various ways:
|  
|  (r.x) (.y) would be a valid function application of the function (r.x)
|  to the record selection section (.y)
|  
|  r (.x) (.y) would be a function application of the function r to the
|  arguments (.x) and (.y) which are record selection sections.
|  
|  r (.x.y) I'm not sure about whether to allow, but if so, it's a
|  function application equivalent to r (\t -> t.x.y)
|  
|  > I think you intend that all these would be illegal
|  >         f r.x
|  >         f r .x
|  >         r .x y
|  >
|  > So somehow postfix record selection has the same precedence as
|  function application, and is left-associative with itself, but is non-
|  associative with function application.  That's a new concept.
|  >
|  > I suspect what you intend is that naked .x is illegal altogether,
|  except in parens, thus (.x).   So you would allow
|  >         r.x.y
|  > as a single lexeme, but not have any of this postfix operator stuff.
|  
|  Yes.
|  
|  > Would you like to add C7 so we all vote for the same thing?  Or not
|  -- it's up to you.
|  
|  Doing so now :)
|  
|  > Thanks
|  >
|  > Simon
|  >
|  > |  -----Original Message-----
|  > |  From: Cale Gibbard <cgibbard at gmail.com>
|  > |  Sent: 15 March 2020 02:32
|  > |  To: Christopher Allen <cma at bitemyapp.com>
|  > |  Cc: Simon Peyton Jones <simonpj at microsoft.com>; Simon Marlow
|  > |  <marlowsd at gmail.com>; ghc-steering-committee <ghc-steering-
|  > |  committee at haskell.org>
|  > |  Subject: Re: RecordDotSyntax proposal: next steps
|  > |
|  > |  I registered my "aye" as well, but I'd just like to reiterate
|  that I
|  > |  think the language is already hard enough for beginners and
|  experts
|  > |  alike to parse. The fact that all of these options are probably
|  what
|  > |  *someone* would intuitively expect and that there are so many
|  axes
|  > |  along which we're not sure how to disambiguate various
|  expressions
|  > |  seems like a strong signal that this whole thing is ill-advised.
|  > |
|  > |  If this makes its way into GHC, it'll be banned where I work for
|  being
|  > |  much too confusing and unnecessary, but that still won't absolve
|  us of
|  > |  needing to deal with it, as it'll much harder to guarantee that
|  none
|  > |  of our dependencies will ever start using it.
|  > |
|  > |  Actually, I just changed my mind, maybe there's one other option
|  that
|  > |  should make it in as a second option in case we're unable to kill
|  this
|  > |  proposal: none of the ambiguous expressions that are taken as
|  examples
|  > |  there is valid. Take the record-selection-dot to be at the same
|  level
|  > |  of precedence as function application, and therefore it must be
|  > |  parenthesized when used alongside function applications. I still
|  don't
|  > |  like the proposal with that option, but it's better than C2-C6.
|  > |
|  > |  Should we add it?
|  > |
|  > |  On Sat, 14 Mar 2020 at 12:21, Christopher Allen
|  <cma at bitemyapp.com> wrote:
|  > |  >
|  > |  > Marked myself AYE for the choices.
|  > |  >
|  > |  > On Mar 13, 2020, at 12:43 PM, Simon Peyton Jones
|  <simonpj at microsoft.com>
|  > |  wrote:
|  > |  >
|  > |  > Thanks.   You can’t vote if you don’t understand the
|  alternatives!  And
|  > |  if you can’t maybe others can’t – or will do so based on
|  different
|  > |  understandings of the same thing.  That would be Bad.
|  > |  >
|  > |  > I’m not well positioned to fix this because I don’t know where
|  the
|  > |  ambiguities are.  Would you like to ask some clarifying
|  questions?
|  > |  >
|  > |  > Simon
|  > |  >
|  > |  > From: Simon Marlow <marlowsd at gmail.com>
|  > |  > Sent: 13 March 2020 17:30
|  > |  > To: Simon Peyton Jones <simonpj at microsoft.com>
|  > |  > Cc: Christopher Allen <cma at bitemyapp.com>; Cale Gibbard
|  > |  <cgibbard at gmail.com>; ghc-steering-committee <ghc-steering-
|  > |  committee at haskell.org>
|  > |  > Subject: Re: RecordDotSyntax proposal: next steps
|  > |  >
|  > |  >
|  > |  > It's still a bit hard (IMO) to understand what precise changes
|  each
|  > |  proposal would make to the syntax, but I don't want to hold
|  things up so
|  > |  I've added an AYE.
|  > |  >
|  > |  >
|  > |  >
|  > |  > Cheers
|  > |  >
|  > |  > Simon
|  > |  >
|  > |  >
|  > |  >
|  > |  > On Fri, 13 Mar 2020 at 10:38, Simon Peyton Jones
|  <simonpj at microsoft.com>
|  > |  wrote:
|  > |  >
|  > |  > Chris, Cale, Simon
|  > |  > I wonder if you might have a moment to respond to this email?
|  > |  > Thanks
|  > |  > Simon
|  > |  >
|  > |  > From: Simon Peyton Jones <simonpj at microsoft.com>
|  > |  > Sent: 09 March 2020 09:56
|  > |  > To: ghc-steering-committee <ghc-steering-committee at haskell.org>
|  > |  > Cc: Simon Peyton Jones <simonpj at microsoft.com>
|  > |  > Subject: RE: RecordDotSyntax proposal: next steps
|  > |  >
|  > |  > Colleagues
|  > |  > Thanks for your various replies.   I have
|  > |  >
|  > |  > Added a couple more examples (please check)
|  > |  > Split (C2a) and (C2b) – thank you Joachim for filling out the
|  list.
|  > |  > Add a Notes section that identifies some consequences,
|  hopefully
|  > |  objectively.
|  > |  > Added a list  at the end where you can add your AYE when happy.
|  > |  >
|  > |  > Can you review, and Christopher, Richard, Cale, Simon, Eric,
|  Alejandro,
|  > |  Arnaud: please add AYE or suggest further changes.
|  > |  > This is painstaking but I think it is clarifying. I have found
|  writing
|  > |  out the examples is quite helpful.  Feel free to suggest more if
|  you think
|  > |  there are some cases that are unclear.
|  > |  > Thanks
|  > |  > Simon
|  > |  >
|  > |  > From: Simon Peyton Jones <simonpj at microsoft.com>
|  > |  > Sent: 06 March 2020 17:59
|  > |  > To: ghc-steering-committee <ghc-steering-committee at haskell.org>
|  > |  > Cc: Simon Peyton Jones <simonpj at microsoft.com>
|  > |  > Subject: RecordDotSyntax proposal: next steps
|  > |  >
|  > |  > Colleagues
|  > |  > I’m sorry to have been dragging my feet on the records
|  proposal.   First
|  > |  there was half term holiday, and then the ICFP deadline, so I’ve
|  been out
|  > |  of action for several weeks.
|  > |  > It’s pretty clear that we are not going to achieve 100%
|  consensus, so
|  > |  the right thing to do is to vote, using the single-transferrable-
|  vote
|  > |  scheme that Joachim runs.  It’s worth striving for consensus,
|  because the
|  > |  debate can be clarifying (and has been!).  But I don’t regard
|  non-
|  > |  consensus as a failure.  These things are all judgement calls,
|  and
|  > |  people’s judgement can legitimately differ.   Voting lets us
|  nevertheless
|  > |  reach a conclusion.
|  > |  > So here’s what I propose
|  > |  >
|  > |  > I’ve put up a list of choices for us to vote on here, informed
|  by our
|  > |  most recent email exchanges. The first thing is to ensure that
|  this list
|  > |  is
|  > |  >
|  > |  > Complete: no choices that people really want are omitted.
|  > |  > Clear and unambiguous.  When we vote we must know exactly what
|  we are
|  > |  voting for!
|  > |  >
|  > |  > Can you all respond about that, including “Aye” if you think it
|  is both
|  > |  complete and clear.
|  > |  >
|  > |  > Once we are all satisfied, I’ll invite you to vote.  The
|  easiest way to
|  > |  do so might be to edit the Google doc directly, so there’s a
|  single point
|  > |  of reference.
|  > |  >
|  > |  > Please also let me know if you think we should be doing
|  anything else.
|  > |  > Thanks!
|  > |  > Simon
|  > |  >
|  > |  >


More information about the ghc-steering-committee mailing list