[GHC] #14646: GHC 8.4.1 regression: rank-n types no longer parenthesized when pretty-printed

GHC ghc-devs at haskell.org
Mon Jan 8 15:07:15 UTC 2018


#14646: GHC 8.4.1 regression: rank-n types no longer parenthesized when pretty-
printed
-------------------------------------+-------------------------------------
        Reporter:  RyanGlScott       |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  high              |            Milestone:  8.4.1
       Component:  GHC API           |              Version:  8.4.1-alpha1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Incorrect result  |  Unknown/Multiple
  at runtime                         |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by goldfire):

 I think this will be hard to fix. The problem is that `ppParendHsType` was
 bad, as `HsSyn` already tracks parentheses. It was silly to have another
 function guess at where to put more of them. And it often guessed wrong,
 leading to all sorts of pretty-printer infelicities.

 On the other hand, Template Haskell does ''not'' track parentheses. And so
 when GHC converts TH to `HsSyn`, the parentheses aren't inserted and so
 are not pretty-printed.

 I see two ways forward:

 1. Track parentheses in TH, breaking lots and lots of client code. (Note
 that this is different than TH's usual churn of adding new constructs,
 because much code out there that consumes the TH AST will start silently
 failing in the presence of an unexpected ''old'' construct.)

 2. Insert parens when converting TH AST to `HsSyn`. By using precedence
 rules, etc., it should be possible to do a passable job, but we'll never
 replicate exactly what the user wrote.

 I think I favor (2).

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14646#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list