[GHC] #16030: Poor pretty-printing of GADT constructors in GHCi

GHC ghc-devs at haskell.org
Wed Dec 19 19:57:38 UTC 2018


#16030: Poor pretty-printing of GADT constructors in GHCi
-------------------------------------+-------------------------------------
        Reporter:  RyanGlScott       |                Owner:  (none)
            Type:  bug               |               Status:  patch
        Priority:  normal            |            Milestone:  8.8.1
       Component:  Compiler          |              Version:  8.7
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D5440
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Krzysztof Gogolewski <krz.gogolewski@…>):

 In [changeset:"9d9e35574a92773d872efd58a67339a9e054a9f1/ghc"
 9d9e3557/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="9d9e35574a92773d872efd58a67339a9e054a9f1"
 Fix #16030 by refactoring IfaceSyn's treatment of GADT constructors

 Summary:
 GHCi's `:info` command was pretty-printined GADT
 constructors suboptimally in the following ways:

 1. Sometimes, fields were parenthesized when they did not need it,
    e.g.,

 ```lang=haskell
 data Foo a where
   MkFoo :: (Maybe a) -> Foo a
 ```

    I fixed this by refactoring some code in `pprIfaceConDecl` to be a
    little smarter with respect to GADT syntax. See `pprFieldArgTy`
    and `pprArgTy`.
 2. With `-fprint-explicit-kinds` enabled, there would be times when
    specified arguments would be printed without a leading `@` in GADT
    return types, e.g.,

 ```lang=haskell
 data Bar @k (a :: k) where
   MkBar :: Bar k a
 ```

    It turns out that `ppr_tc_app`, the function which pretty-prints
    these return types, was not using the proper machinery to print
    out the arguments, which caused the visibilities to be forgotten
    entirely. I refactored `ppr_tc_app` to do this correctly.

 Test Plan: make test TEST=T16030

 Reviewers: goldfire, bgamari, simonpj

 Reviewed By: simonpj

 Subscribers: simonpj, rwbarton, carter

 GHC Trac Issues: #16030

 Differential Revision: https://phabricator.haskell.org/D5440
 }}}

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


More information about the ghc-tickets mailing list