Strange Outputable instance structure
GHC's Outputable instances for
HsSyn look like
instance (p ~ GhcPass pass, OutputableBndrId p) => Outputable (Pat p) where ppr = pprPat
But if we write
instance (OutputableBndrId (GhcPass p)) => Outputable (Pat (GhcPass p)) where ppr = pprPat
the instance is simpler, and (Richard and I checked) everything still works. Moreover, it is now possible to write instances for an index other than
GhcPass, which is not possible today.
Let's do it.
OutputableBndrId can take a
GhcPass, so we'd get
instance (OutputableBndrId p) => Outputable (Pat (GhcPass p)) where ppr = pprPat
The entire pretty printer is GHC-specific, so we lose nothing by these changes.