• Ryan Scott's avatar
    Print explicit foralls in type family eqns when appropriate · f932b1aa
    Ryan Scott authored
    Summary:
    When `-fprint-explicit-foralls` is enabled, type family
    equations are either printed without an explict `forall` entirely,
    or with a bizarre square bracket syntax (in the case of closed type
    families). I find neither satisfying, so in this patch, I introduce
    support for printing explicit `forall`s in open type-family, closed
    type-family, and data-family equations when appropriate. (By "when
    appropriate", I refer to the conditions laid out in
    `Note [When to print foralls]` in `IfaceType`.)
    
    One tricky point in the implementation is that I had to pick a
    visibility for each type variable in a `CoAxiom`/`FamInst` in order
    to be able to pass it to `pprUserIfaceForAll` //et al.// Because
    the type variables in a type family instance equation can't be
    instantiated by the programmer anyway, the choice only really matters
    for pretty-printing purposes, so I simply went with good ol'
    trustworthy `Specified`. (This design choice is documented in
    `Note [Printing foralls in type family instances]` in `IfaceType`.)
    
    Test Plan: make test TEST=T15827
    
    Reviewers: goldfire, bgamari, simonpj
    
    Reviewed By: simonpj
    
    Subscribers: simonpj, rwbarton, carter
    
    GHC Trac Issues: #15827
    
    Differential Revision: https://phabricator.haskell.org/D5282
    f932b1aa
IfaceSyn.hs 84.6 KB