
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-bounces@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