Skip to content

Remove recursive uses of `pprParendHsExpr` from `HsExpr.ppr_expr`

An HsExpr should look exactly as a user wrote some Haskell code. Its pretty printer should therefore be quite dumb. Just print out the code! But a few places in GHC create HsExprs and aren't scrupulous with regard to adding HsPar nodes where source syntax would need them. Thus, well-meaning souls have added pprParendExpr calls to the HsExpr pretty-printer to try to cover these cases.

Simon and I think that we should remove all recursive uses of pprParendExpr from the HsExpr pretty-printer and instead add the HsPars where necessary.

It was recently reported that the following test cases break when simply removing pprParendExpr:

Unexpected failures:
   deriving/should_fail          T4846 [stderr mismatch] (normal)
   generics                      GenDerivOutput [stderr mismatch] (normal)
   generics                      GenDerivOutput1_0 [stderr mismatch] (normal)
   generics                      GenDerivOutput1_1 [stderr mismatch] (normal)
   ghci/scripts                  T10248 [bad stderr] (ghci)
   indexed-types/should_compile  PushedInAsGivens [stderr mismatch] (normal)
   safeHaskell/safeLanguage      SafeLang10 [stderr mismatch] (normal)
   safeHaskell/safeLanguage      SafeLang17 [stderr mismatch] (normal)
   typecheck/should_fail         T8603 [stderr mismatch] (normal)
   typecheck/should_fail         tcfail177 [stderr mismatch] (normal)

See also considerable commentary on D1114.

Trac metadata
Trac field Value
Version 7.10.2
Type Task
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information