Fix #16030 by refactoring IfaceSyn's treatment of GADT constructors
GHCi's :info
command was pretty-printined GADT
constructors suboptimally in the following ways:
- 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