<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    On 4/4/21 1:52 PM, Iavor Diatchki wrote:<br>
    <blockquote type="cite"
cite="mid:CAGK9nuoZp6nyk_H1wYOkOCi5r-XnbBCd8RWhLj-wZJ6tCDbBvQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">Hi Alexis,
        <div><br>
        </div>
        <div>I wasn't sure what the "alternative layout" is either and
          did some googling, and it appears that it is something that
          was never really documented properly.   The following link
          contains pointers to the commit that introduced it (in 2009!) 
          (not the main ticket but some of the comments)</div>
      </div>
    </blockquote>
    <p>Thanks, that’s a helpful pointer, though of course it still
      doesn’t explain very much. I’m still interested in understanding
      what the purpose of “alternative layout” is and how it operates,
      if anyone else has any idea.<br>
    </p>
    <blockquote type="cite"
cite="mid:CAGK9nuoZp6nyk_H1wYOkOCi5r-XnbBCd8RWhLj-wZJ6tCDbBvQ@mail.gmail.com">
      <div dir="ltr">
        <div>Overall, I do think that Haskell's layout rule is more
          complicated than it needs to be, and this is mostly because of
          the rule that requires the insertion of a "virtual close
          curly" on a parse error.</div>
      </div>
    </blockquote>
    <p>Yes, this does seem to be by far the trickiest bit. But I’d be
      sad not to have it, as without it, even simple things like</p>
    <blockquote>
      <pre>let x = 3 in e</pre>
    </blockquote>
    <p>would not be grammatically valid.<br>
    </p>
    <blockquote type="cite"
cite="mid:CAGK9nuoZp6nyk_H1wYOkOCi5r-XnbBCd8RWhLj-wZJ6tCDbBvQ@mail.gmail.com">
      <div dir="ltr">My feeling is that it'd be pretty tricky to do
        layout in the parser with grammar rules, but you may be able to
        do something with the parser state.</div>
    </blockquote>
    <p>Yes, I have some vague ideas, but none of them are particularly
      fleshed out. It’s entirely possible that I just don’t understand
      the relationship between the lexer and the parser (which seems
      somewhat obscured by the “alternative layout” stuff), and the
      ideas I have are what’s already implemented today. I’ll have to
      study the implementation more closely.<br>
    </p>
    <p>In any case, thank you for your response! The ALR-related pointer
      certainly clarifies at least a little.</p>
    <p>Alexis<br>
    </p>
  </body>
</html>