RE: ppr of HsDo
I think it’s because the “;” is treated as part of the let not part of the do. After all, how does the implicit layout of the let know that the let-bindings are finished? This should work foo = do { let { x = 1 }; Just 5 } Now the let bindings are clearly brought to an end. Or this foo = do { let x = 1 ; Just 5 } Now the “’;” is to the left of the x=1 and so brings the let’s implicit layout to an end. But not this! foo = do { let x = 1; Just 5 } So it’s a bug in the pretty-printer, not the parser SImon From: ghc-devs [mailto:ghc-devs-boun...@haskell.org] On Behalf Of Alan & Kim Zimmerman Sent: 10 November 2016 07:01 To: ghc-devs@haskell.org Subject: ppr of HsDo The pretty printer turns foo = do let x = 1 Just 5 into foo = do { let x = 1; Just 5 } which does not parse, complaining about "parse error on input ‘Just’" Is this a parser error or a ppr problem? I am keen to fix the ppr to output foo = do let x = 1 Just 5 but I am not sure if there is a parser bug too. Alan ___ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Re: ppr of HsDo
Thanks. And any thoughts on my proposal to do away with the braces/semi completely? I suspect GHC is the only significant body of code that uses that style still. Alan On Thu, Nov 10, 2016 at 10:24 AM, Simon Peyton Jones wrote: > I think it’s because the “;” is treated as part of the let not part of > the do. After all, how does the implicit layout of the let know that the > let-bindings are finished? > > > > This should work > > > > foo > = do { let { x = 1 }; > Just 5 } > > > > Now the let bindings are clearly brought to an end. Or this > > > > foo > = do { let x = 1 > >; Just 5 } > > > > Now the “’;” is to the left of the x=1 and so brings the let’s implicit > layout to an end. > > > > But not this! > > > > foo > = do { let x = 1; Just 5 } > > > > So it’s a bug in the pretty-printer, not the parser > > > > SImon > > > > > > *From:* ghc-devs [mailto:ghc-devs-boun...@haskell.org] *On Behalf Of *Alan > & Kim Zimmerman > *Sent:* 10 November 2016 07:01 > *To:* ghc-devs@haskell.org > *Subject:* ppr of HsDo > > > > The pretty printer turns > > foo = do > let x = 1 > Just 5 > > into > > foo > = do { let x = 1; > Just 5 } > > which does not parse, complaining about "parse error on input ‘Just’" > > Is this a parser error or a ppr problem? I am keen to fix the ppr to > output > > > foo > = do let x = 1 >Just 5 > > but I am not sure if there is a parser bug too. > > Alan > ___ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
RE: ppr of HsDo
It’s not about GHC’s programming style, is it? It’s about what the pretty-printer does. If it were me I’d use braces and semicolons everywhere, so that I could guarantee to parse it easily. But that’s not a strong opinion and I would willingly yield to others! Simon From: Alan & Kim Zimmerman [mailto:alan.z...@gmail.com] Sent: 10 November 2016 08:31 To: Simon Peyton Jones Cc: ghc-devs@haskell.org Subject: Re: ppr of HsDo Thanks. And any thoughts on my proposal to do away with the braces/semi completely? I suspect GHC is the only significant body of code that uses that style still. Alan On Thu, Nov 10, 2016 at 10:24 AM, Simon Peyton Jones mailto:simo...@microsoft.com>> wrote: I think it’s because the “;” is treated as part of the let not part of the do. After all, how does the implicit layout of the let know that the let-bindings are finished? This should work foo = do { let { x = 1 }; Just 5 } Now the let bindings are clearly brought to an end. Or this foo = do { let x = 1 ; Just 5 } Now the “’;” is to the left of the x=1 and so brings the let’s implicit layout to an end. But not this! foo = do { let x = 1; Just 5 } So it’s a bug in the pretty-printer, not the parser SImon From: ghc-devs [mailto:ghc-devs-boun...@haskell.org<mailto:ghc-devs-boun...@haskell.org>] On Behalf Of Alan & Kim Zimmerman Sent: 10 November 2016 07:01 To: ghc-devs@haskell.org<mailto:ghc-devs@haskell.org> Subject: ppr of HsDo The pretty printer turns foo = do let x = 1 Just 5 into foo = do { let x = 1; Just 5 } which does not parse, complaining about "parse error on input ‘Just’" Is this a parser error or a ppr problem? I am keen to fix the ppr to output foo = do let x = 1 Just 5 but I am not sure if there is a parser bug too. Alan ___ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Re: ppr of HsDo
For context, I am putting in a test suite similar to the one for ghc-exactprint to ensure that the pretty printer always generates code that can be round tripped back to the original AST. This means that fears of some uncaught case requiring us do it the guaranteed safe way should be allayed. In the process I am updating the pretty printer. So the question really is, given the existence of that test suite, what style of code should we have in our messages, and in pretty printed code? Alan On Thu, Nov 10, 2016 at 12:02 PM, Simon Peyton Jones wrote: > > > It’s not about GHC’s programming style, is it? It’s about what the > pretty-printer does. If it were me I’d use braces and semicolons > everywhere, so that I could guarantee to parse it easily. > > > > But that’s not a strong opinion and I would willingly yield to others! > > > > Simon > > > > *From:* Alan & Kim Zimmerman [mailto:alan.z...@gmail.com] > *Sent:* 10 November 2016 08:31 > *To:* Simon Peyton Jones > *Cc:* ghc-devs@haskell.org > *Subject:* Re: ppr of HsDo > > > > Thanks. > > And any thoughts on my proposal to do away with the braces/semi > completely? I suspect GHC is the only significant body of code that uses > that style still. > > Alan > > > > On Thu, Nov 10, 2016 at 10:24 AM, Simon Peyton Jones < > simo...@microsoft.com> wrote: > > I think it’s because the “;” is treated as part of the let not part of > the do. After all, how does the implicit layout of the let know that the > let-bindings are finished? > > > > This should work > > > > foo > = do { let { x = 1 }; > Just 5 } > > > > Now the let bindings are clearly brought to an end. Or this > > > > foo > = do { let x = 1 > >; Just 5 } > > > > Now the “’;” is to the left of the x=1 and so brings the let’s implicit > layout to an end. > > > > But not this! > > > > foo > = do { let x = 1; Just 5 } > > > > So it’s a bug in the pretty-printer, not the parser > > > > SImon > > > > > > *From:* ghc-devs [mailto:ghc-devs-boun...@haskell.org] *On Behalf Of *Alan > & Kim Zimmerman > *Sent:* 10 November 2016 07:01 > *To:* ghc-devs@haskell.org > *Subject:* ppr of HsDo > > > > The pretty printer turns > > foo = do > let x = 1 > Just 5 > > into > > foo > = do { let x = 1; > Just 5 } > > which does not parse, complaining about "parse error on input ‘Just’" > > Is this a parser error or a ppr problem? I am keen to fix the ppr to > output > > > foo > = do let x = 1 >Just 5 > > but I am not sure if there is a parser bug too. > > Alan > > > ___ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Re: ppr of HsDo
As a follow up, I will be continuing with the least-invasive change, which is to keep the existing braces/semis, and make sure that they are all produced correctly. Alan On Thu, Nov 10, 2016 at 12:06 PM, Alan & Kim Zimmerman wrote: > For context, I am putting in a test suite similar to the one for > ghc-exactprint to ensure that the pretty printer always generates code that > can be round tripped back to the original AST. > > This means that fears of some uncaught case requiring us do it the > guaranteed safe way should be allayed. > > In the process I am updating the pretty printer. > > So the question really is, given the existence of that test suite, what > style of code should we have in our messages, and in pretty printed code? > > Alan > > > On Thu, Nov 10, 2016 at 12:02 PM, Simon Peyton Jones < > simo...@microsoft.com> wrote: > >> >> >> It’s not about GHC’s programming style, is it? It’s about what the >> pretty-printer does. If it were me I’d use braces and semicolons >> everywhere, so that I could guarantee to parse it easily. >> >> >> >> But that’s not a strong opinion and I would willingly yield to others! >> >> >> >> Simon >> >> >> >> *From:* Alan & Kim Zimmerman [mailto:alan.z...@gmail.com] >> *Sent:* 10 November 2016 08:31 >> *To:* Simon Peyton Jones >> *Cc:* ghc-devs@haskell.org >> *Subject:* Re: ppr of HsDo >> >> >> >> Thanks. >> >> And any thoughts on my proposal to do away with the braces/semi >> completely? I suspect GHC is the only significant body of code that uses >> that style still. >> >> Alan >> >> >> >> On Thu, Nov 10, 2016 at 10:24 AM, Simon Peyton Jones < >> simo...@microsoft.com> wrote: >> >> I think it’s because the “;” is treated as part of the let not part of >> the do. After all, how does the implicit layout of the let know that the >> let-bindings are finished? >> >> >> >> This should work >> >> >> >> foo >> = do { let { x = 1 }; >> Just 5 } >> >> >> >> Now the let bindings are clearly brought to an end. Or this >> >> >> >> foo >> = do { let x = 1 >> >>; Just 5 } >> >> >> >> Now the “’;” is to the left of the x=1 and so brings the let’s implicit >> layout to an end. >> >> >> >> But not this! >> >> >> >> foo >> = do { let x = 1; Just 5 } >> >> >> >> So it’s a bug in the pretty-printer, not the parser >> >> >> >> SImon >> >> >> >> >> >> *From:* ghc-devs [mailto:ghc-devs-boun...@haskell.org] *On Behalf Of *Alan >> & Kim Zimmerman >> *Sent:* 10 November 2016 07:01 >> *To:* ghc-devs@haskell.org >> *Subject:* ppr of HsDo >> >> >> >> The pretty printer turns >> >> foo = do >> let x = 1 >> Just 5 >> >> into >> >> foo >> = do { let x = 1; >> Just 5 } >> >> which does not parse, complaining about "parse error on input ‘Just’" >> >> Is this a parser error or a ppr problem? I am keen to fix the ppr to >> output >> >> >> foo >> = do let x = 1 >>Just 5 >> >> but I am not sure if there is a parser bug too. >> >> Alan >> >> >> > > ___ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs