diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/GHC/Cmm/Node.hs | 1 | ||||
-rw-r--r-- | compiler/GHC/Hs.hs | 2 | ||||
-rw-r--r-- | compiler/GHC/Hs/Binds.hs | 1 | ||||
-rw-r--r-- | compiler/GHC/Hs/Decls.hs | 1 | ||||
-rw-r--r-- | compiler/GHC/Hs/Expr.hs | 1 | ||||
-rw-r--r-- | compiler/GHC/Hs/Expr.hs-boot | 3 | ||||
-rw-r--r-- | compiler/GHC/Hs/Extension.hs | 64 | ||||
-rw-r--r-- | compiler/GHC/Hs/Extension/Ppr.hs | 67 | ||||
-rw-r--r-- | compiler/GHC/Hs/ImpExp.hs | 1 | ||||
-rw-r--r-- | compiler/GHC/Hs/Lit.hs | 1 | ||||
-rw-r--r-- | compiler/GHC/Hs/Pat.hs | 1 | ||||
-rw-r--r-- | compiler/GHC/Hs/Pat.hs-boot | 3 | ||||
-rw-r--r-- | compiler/GHC/Hs/Type.hs | 1 | ||||
-rw-r--r-- | compiler/GHC/Hs/Utils.hs | 1 | ||||
-rw-r--r-- | compiler/ghc.cabal.in | 1 |
15 files changed, 84 insertions, 65 deletions
diff --git a/compiler/GHC/Cmm/Node.hs b/compiler/GHC/Cmm/Node.hs index 117ed9747a..b5349c8f4d 100644 --- a/compiler/GHC/Cmm/Node.hs +++ b/compiler/GHC/Cmm/Node.hs @@ -35,6 +35,7 @@ import GHC.Cmm.Switch import GHC.Data.FastString import GHC.Types.ForeignCall import GHC.Utils.Outputable +import GHC.Hs.Extension.Ppr () import GHC.Runtime.Heap.Layout import GHC.Types.Tickish (CmmTickish) import qualified GHC.Types.Unique as U diff --git a/compiler/GHC/Hs.hs b/compiler/GHC/Hs.hs index 6c4a810b35..fa0a265049 100644 --- a/compiler/GHC/Hs.hs +++ b/compiler/GHC/Hs.hs @@ -31,6 +31,7 @@ module GHC.Hs ( module GHC.Hs.Utils, module GHC.Hs.Doc, module GHC.Hs.Extension, + module GHC.Hs.Extension.Ppr, module GHC.Parser.Annotation, Fixity, @@ -48,6 +49,7 @@ import GHC.Hs.ImpExp import GHC.Hs.Lit import Language.Haskell.Syntax import GHC.Hs.Extension +import GHC.Hs.Extension.Ppr import GHC.Parser.Annotation import GHC.Hs.Pat import GHC.Hs.Type diff --git a/compiler/GHC/Hs/Binds.hs b/compiler/GHC/Hs/Binds.hs index 7ce59266c4..6c68544a3c 100644 --- a/compiler/GHC/Hs/Binds.hs +++ b/compiler/GHC/Hs/Binds.hs @@ -36,6 +36,7 @@ import {-# SOURCE #-} GHC.Hs.Pat (pprLPat ) import GHC.Types.Tickish import GHC.Hs.Extension +import GHC.Hs.Extension.Ppr import GHC.Parser.Annotation import GHC.Hs.Type import GHC.Tc.Types.Evidence diff --git a/compiler/GHC/Hs/Decls.hs b/compiler/GHC/Hs/Decls.hs index 8bb7834f3b..11513d0386 100644 --- a/compiler/GHC/Hs/Decls.hs +++ b/compiler/GHC/Hs/Decls.hs @@ -114,6 +114,7 @@ import GHC.Types.Basic import GHC.Core.Coercion import Language.Haskell.Syntax.Extension import GHC.Hs.Extension +import GHC.Hs.Extension.Ppr import GHC.Parser.Annotation import GHC.Types.Name import GHC.Types.Name.Set diff --git a/compiler/GHC/Hs/Expr.hs b/compiler/GHC/Hs/Expr.hs index 5b2ee9dc73..c5be8967a1 100644 --- a/compiler/GHC/Hs/Expr.hs +++ b/compiler/GHC/Hs/Expr.hs @@ -39,6 +39,7 @@ import GHC.Hs.Lit import Language.Haskell.Syntax.Extension import Language.Haskell.Syntax.Basic (FieldLabelString(..)) import GHC.Hs.Extension +import GHC.Hs.Extension.Ppr import GHC.Hs.Type import GHC.Hs.Binds import GHC.Parser.Annotation diff --git a/compiler/GHC/Hs/Expr.hs-boot b/compiler/GHC/Hs/Expr.hs-boot index 6f1744096d..5f13f4ee28 100644 --- a/compiler/GHC/Hs/Expr.hs-boot +++ b/compiler/GHC/Hs/Expr.hs-boot @@ -19,7 +19,8 @@ import Language.Haskell.Syntax.Expr , GRHSs , HsUntypedSplice ) -import GHC.Hs.Extension ( OutputableBndrId, GhcPass ) +import GHC.Hs.Extension ( GhcPass ) +import GHC.Hs.Extension.Ppr ( OutputableBndrId ) import GHC.Types.Name ( Name ) import Data.Bool ( Bool ) import Data.Maybe ( Maybe ) diff --git a/compiler/GHC/Hs/Extension.hs b/compiler/GHC/Hs/Extension.hs index 922288650f..ec8b3c4444 100644 --- a/compiler/GHC/Hs/Extension.hs +++ b/compiler/GHC/Hs/Extension.hs @@ -1,21 +1,10 @@ -{-# LANGUAGE AllowAmbiguousTypes #-} -- for pprIfTc, etc. {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE EmptyDataDeriving #-} {-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilyDependencies #-} +{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableSuperClasses #-} -- for IsPass; see Note [NoGhcTc] -{-# LANGUAGE UndecidableInstances #-} -- Wrinkle in Note [Trees That Grow] - -- in module Language.Haskell.Syntax.Extension - -{-# OPTIONS_GHC -Wno-orphans #-} -- Outputable module GHC.Hs.Extension where @@ -24,14 +13,11 @@ module GHC.Hs.Extension where import GHC.Prelude -import GHC.TypeLits (KnownSymbol, symbolVal) - import Data.Data hiding ( Fixity ) import Language.Haskell.Syntax.Extension import GHC.Types.Name import GHC.Types.Name.Reader import GHC.Types.Var -import GHC.Utils.Outputable hiding ((<>)) import GHC.Types.SrcLoc (GenLocated(..), unLoc) import GHC.Utils.Panic import GHC.Parser.Annotation @@ -210,51 +196,3 @@ type instance NoGhcTc (GhcPass pass) = GhcPass (NoGhcTcPass pass) type family NoGhcTcPass (p :: Pass) :: Pass where NoGhcTcPass 'Typechecked = 'Renamed NoGhcTcPass other = other - --- |Constraint type to bundle up the requirement for 'OutputableBndr' on both --- the @id@ and the 'NoGhcTc' of it. See Note [NoGhcTc]. -type OutputableBndrId pass = - ( OutputableBndr (IdGhcP pass) - , OutputableBndr (IdGhcP (NoGhcTcPass pass)) - , Outputable (GenLocated (Anno (IdGhcP pass)) (IdGhcP pass)) - , Outputable (GenLocated (Anno (IdGhcP (NoGhcTcPass pass))) (IdGhcP (NoGhcTcPass pass))) - , IsPass pass - ) - --- useful helper functions: -pprIfPs :: forall p. IsPass p => (p ~ 'Parsed => SDoc) -> SDoc -pprIfPs pp = case ghcPass @p of GhcPs -> pp - _ -> empty - -pprIfRn :: forall p. IsPass p => (p ~ 'Renamed => SDoc) -> SDoc -pprIfRn pp = case ghcPass @p of GhcRn -> pp - _ -> empty - -pprIfTc :: forall p. IsPass p => (p ~ 'Typechecked => SDoc) -> SDoc -pprIfTc pp = case ghcPass @p of GhcTc -> pp - _ -> empty - -type instance Anno (HsToken tok) = TokenLocation - -noHsTok :: GenLocated TokenLocation (HsToken tok) -noHsTok = L NoTokenLoc HsTok - -type instance Anno (HsUniToken tok utok) = TokenLocation - -noHsUniTok :: GenLocated TokenLocation (HsUniToken tok utok) -noHsUniTok = L NoTokenLoc HsNormalTok - ---- Outputable - -instance Outputable NoExtField where - ppr _ = text "NoExtField" - -instance Outputable DataConCantHappen where - ppr = dataConCantHappen - -instance KnownSymbol tok => Outputable (HsToken tok) where - ppr _ = text (symbolVal (Proxy :: Proxy tok)) - -instance (KnownSymbol tok, KnownSymbol utok) => Outputable (HsUniToken tok utok) where - ppr HsNormalTok = text (symbolVal (Proxy :: Proxy tok)) - ppr HsUnicodeTok = text (symbolVal (Proxy :: Proxy utok)) diff --git a/compiler/GHC/Hs/Extension/Ppr.hs b/compiler/GHC/Hs/Extension/Ppr.hs new file mode 100644 index 0000000000..087c1a89db --- /dev/null +++ b/compiler/GHC/Hs/Extension/Ppr.hs @@ -0,0 +1,67 @@ +{-# LANGUAGE ConstraintKinds #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} + +{-# OPTIONS_GHC -Wno-orphans #-} -- Outputable + +module GHC.Hs.Extension.Ppr where + +import GHC.TypeLits (KnownSymbol, symbolVal) + +import Data.Data hiding ( Fixity ) +import Language.Haskell.Syntax.Extension +import GHC.Hs.Extension +import GHC.Utils.Outputable hiding ((<>)) +import GHC.Types.SrcLoc ( GenLocated(..) ) +import GHC.Parser.Annotation + +-- |Constraint type to bundle up the requirement for 'OutputableBndr' on both +-- the @id@ and the 'NoGhcTc' of it. See Note [NoGhcTc]. +type OutputableBndrId pass = + ( OutputableBndr (IdGhcP pass) + , OutputableBndr (IdGhcP (NoGhcTcPass pass)) + , Outputable (GenLocated (Anno (IdGhcP pass)) (IdGhcP pass)) + , Outputable (GenLocated (Anno (IdGhcP (NoGhcTcPass pass))) (IdGhcP (NoGhcTcPass pass))) + , IsPass pass + ) + +-- useful helper functions: +pprIfPs :: forall p. IsPass p => (p ~ 'Parsed => SDoc) -> SDoc +pprIfPs pp = case ghcPass @p of GhcPs -> pp + _ -> empty + +pprIfRn :: forall p. IsPass p => (p ~ 'Renamed => SDoc) -> SDoc +pprIfRn pp = case ghcPass @p of GhcRn -> pp + _ -> empty + +pprIfTc :: forall p. IsPass p => (p ~ 'Typechecked => SDoc) -> SDoc +pprIfTc pp = case ghcPass @p of GhcTc -> pp + _ -> empty + +type instance Anno (HsToken tok) = TokenLocation + +noHsTok :: GenLocated TokenLocation (HsToken tok) +noHsTok = L NoTokenLoc HsTok + +type instance Anno (HsUniToken tok utok) = TokenLocation + +noHsUniTok :: GenLocated TokenLocation (HsUniToken tok utok) +noHsUniTok = L NoTokenLoc HsNormalTok + +--- Outputable + +instance Outputable NoExtField where + ppr _ = text "NoExtField" + +instance Outputable DataConCantHappen where + ppr = dataConCantHappen + +instance KnownSymbol tok => Outputable (HsToken tok) where + ppr _ = text (symbolVal (Proxy :: Proxy tok)) + +instance (KnownSymbol tok, KnownSymbol utok) => Outputable (HsUniToken tok utok) where + ppr HsNormalTok = text (symbolVal (Proxy :: Proxy tok)) + ppr HsUnicodeTok = text (symbolVal (Proxy :: Proxy utok)) diff --git a/compiler/GHC/Hs/ImpExp.hs b/compiler/GHC/Hs/ImpExp.hs index 06500705ba..064bcf0ffb 100644 --- a/compiler/GHC/Hs/ImpExp.hs +++ b/compiler/GHC/Hs/ImpExp.hs @@ -31,6 +31,7 @@ import GHC.Utils.Panic import GHC.Types.SrcLoc import GHC.Parser.Annotation import GHC.Hs.Extension +import GHC.Hs.Extension.Ppr import GHC.Types.Name import GHC.Types.PkgQual diff --git a/compiler/GHC/Hs/Lit.hs b/compiler/GHC/Hs/Lit.hs index 838e3348dd..07bc22ddf5 100644 --- a/compiler/GHC/Hs/Lit.hs +++ b/compiler/GHC/Hs/Lit.hs @@ -31,6 +31,7 @@ import GHC.Types.SourceText import GHC.Core.Type import GHC.Utils.Outputable import GHC.Hs.Extension +import GHC.Hs.Extension.Ppr import Language.Haskell.Syntax.Expr ( HsExpr ) import Language.Haskell.Syntax.Extension import Language.Haskell.Syntax.Lit diff --git a/compiler/GHC/Hs/Pat.hs b/compiler/GHC/Hs/Pat.hs index 3d251103ce..afb9a4ebc8 100644 --- a/compiler/GHC/Hs/Pat.hs +++ b/compiler/GHC/Hs/Pat.hs @@ -64,6 +64,7 @@ import GHC.Hs.Lit import Language.Haskell.Syntax.Extension import GHC.Parser.Annotation import GHC.Hs.Extension +import GHC.Hs.Extension.Ppr import GHC.Hs.Type import GHC.Tc.Types.Evidence import GHC.Types.Basic diff --git a/compiler/GHC/Hs/Pat.hs-boot b/compiler/GHC/Hs/Pat.hs-boot index f128e6d4ea..011a606b9e 100644 --- a/compiler/GHC/Hs/Pat.hs-boot +++ b/compiler/GHC/Hs/Pat.hs-boot @@ -8,7 +8,8 @@ module GHC.Hs.Pat where import GHC.Utils.Outputable -import GHC.Hs.Extension ( OutputableBndrId, GhcPass ) +import GHC.Hs.Extension ( GhcPass ) +import GHC.Hs.Extension.Ppr ( OutputableBndrId ) import Language.Haskell.Syntax.Pat diff --git a/compiler/GHC/Hs/Type.hs b/compiler/GHC/Hs/Type.hs index 770a91b35a..181e1eecd9 100644 --- a/compiler/GHC/Hs/Type.hs +++ b/compiler/GHC/Hs/Type.hs @@ -97,6 +97,7 @@ import {-# SOURCE #-} GHC.Hs.Expr ( pprUntypedSplice, HsUntypedSpliceResult(..) import Language.Haskell.Syntax.Extension import GHC.Core.DataCon( SrcStrictness(..), SrcUnpackedness(..), HsImplBang(..) ) import GHC.Hs.Extension +import GHC.Hs.Extension.Ppr import GHC.Parser.Annotation import GHC.Types.Fixity ( LexicalFixity(..) ) diff --git a/compiler/GHC/Hs/Utils.hs b/compiler/GHC/Hs/Utils.hs index 3e74eea3db..c050f9884c 100644 --- a/compiler/GHC/Hs/Utils.hs +++ b/compiler/GHC/Hs/Utils.hs @@ -119,6 +119,7 @@ import GHC.Hs.Type import GHC.Hs.Lit import Language.Haskell.Syntax.Extension import GHC.Hs.Extension +import GHC.Hs.Extension.Ppr import GHC.Parser.Annotation import GHC.Tc.Types.Evidence diff --git a/compiler/ghc.cabal.in b/compiler/ghc.cabal.in index 48a5fa11ed..f85e1741c6 100644 --- a/compiler/ghc.cabal.in +++ b/compiler/ghc.cabal.in @@ -453,6 +453,7 @@ Library GHC.Hs.Expr GHC.Hs.Syn.Type GHC.Hs.Extension + GHC.Hs.Extension.Ppr GHC.Hs.ImpExp GHC.Hs.Instances GHC.Hs.Lit |