diff options
author | Richard Eisenberg <rae@richarde.dev> | 2020-01-29 10:15:01 +0000 |
---|---|---|
committer | Richard Eisenberg <rae@richarde.dev> | 2020-01-29 10:15:01 +0000 |
commit | 288b674de9b09e782e7a407d65add2d6ebf1acab (patch) | |
tree | f6dcca950ff0aa73ca028a15c0eb84f3bb2f7c35 /compiler/GHC/Hs/Extension.hs | |
parent | 7e3feb00443f7f46717ed33f18728cc4a59debf0 (diff) | |
download | haskell-wip/smaller-constraints.tar.gz |
Try dropping OutputableBndrId in favor of IsPasswip/smaller-constraints
Diffstat (limited to 'compiler/GHC/Hs/Extension.hs')
-rw-r--r-- | compiler/GHC/Hs/Extension.hs | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/compiler/GHC/Hs/Extension.hs b/compiler/GHC/Hs/Extension.hs index ebc5da93fa..cb6b654dee 100644 --- a/compiler/GHC/Hs/Extension.hs +++ b/compiler/GHC/Hs/Extension.hs @@ -28,10 +28,10 @@ module GHC.Hs.Extension where import GhcPrelude import Data.Data hiding ( Fixity ) -import GHC.Hs.PlaceHolder import Name import RdrName import Var +import PprCore () -- for instance OutputableBndr Var import Outputable import SrcLoc (Located) @@ -222,9 +222,14 @@ pass = ghcPass @(GhcPass p) -- | Maps the "normal" id type for a given pass type family IdP p -type instance IdP GhcPs = RdrName -type instance IdP GhcRn = Name -type instance IdP GhcTc = Id +type instance IdP (GhcPass p) = IdGhcP p + +-- | Maps the "normal" id type for a GhcPass. +type family IdGhcP p = r | r -> p where + -- injective to allow us to write pprIdP + IdGhcP 'Parsed = RdrName + IdGhcP 'Renamed = Name + IdGhcP 'Typechecked = Id type LIdP p = Located (IdP p) @@ -720,11 +725,12 @@ type family XXIE x -- |Constraint type to bundle up the requirement for 'OutputableBndr' on both -- the @id@ and the 'NameOrRdrName' type for it type OutputableBndrId pass = - ( OutputableBndr (NameOrRdrName (IdP (GhcPass pass))) + -- RAE: this change is just to minimise churn while experimenting + ( {- OutputableBndr (NameOrRdrName (IdP (GhcPass pass))) , OutputableBndr (IdP (GhcPass pass)) , OutputableBndr (NameOrRdrName (IdP (NoGhcTc (GhcPass pass)))) , OutputableBndr (IdP (NoGhcTc (GhcPass pass))) - , IsPass pass + , -} IsPass pass ) -- useful helper functions: @@ -739,3 +745,15 @@ pprIfRn pp = case pass @p of GhcRn -> pp pprIfTc :: forall p. IsPass p => (p ~ 'Typechecked => SDoc) -> SDoc pprIfTc pp = case pass @p of GhcTc -> pp _ -> empty + +pprIdP :: forall p. IsPass p => IdGhcP p -> SDoc +pprIdP var = withOutputableBndr @p $ ppr var + +pprLIdP :: forall p. IsPass p => Located (IdGhcP p) -> SDoc +pprLIdP var = withOutputableBndr @p $ ppr var + +withOutputableBndr :: forall pass r. IsPass pass + => (OutputableBndr (IdP (GhcPass pass)) => r) -> r +withOutputableBndr k = case pass @pass of GhcPs -> k + GhcRn -> k + GhcTc -> k |