Skip to content

Fix #16030 by refactoring IfaceSyn's treatment of GADT constructors

Ben Gamari requested to merge D5440 into master

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.,
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.,

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 (closed)

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

Merge request reports