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