summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rw-r--r--compiler/GHC/Cmm/Node.hs1
-rw-r--r--compiler/GHC/Hs.hs2
-rw-r--r--compiler/GHC/Hs/Binds.hs1
-rw-r--r--compiler/GHC/Hs/Decls.hs1
-rw-r--r--compiler/GHC/Hs/Expr.hs1
-rw-r--r--compiler/GHC/Hs/Expr.hs-boot3
-rw-r--r--compiler/GHC/Hs/Extension.hs64
-rw-r--r--compiler/GHC/Hs/Extension/Ppr.hs67
-rw-r--r--compiler/GHC/Hs/ImpExp.hs1
-rw-r--r--compiler/GHC/Hs/Lit.hs1
-rw-r--r--compiler/GHC/Hs/Pat.hs1
-rw-r--r--compiler/GHC/Hs/Pat.hs-boot3
-rw-r--r--compiler/GHC/Hs/Type.hs1
-rw-r--r--compiler/GHC/Hs/Utils.hs1
-rw-r--r--compiler/ghc.cabal.in1
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