• Ryan Scott's avatar
    Fix #16030 by refactoring IfaceSyn's treatment of GADT constructors · 9d9e3557
    Ryan Scott authored
    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,
    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
    Differential Revision: https://phabricator.haskell.org/D5440
IfaceSyn.hs 86.8 KB