    {-# OPTIONS_GHC -Wno-orphans      #-} -- Outputable and IEWrappedName
    {-# LANGUAGE DataKinds            #-}
    {-# LANGUAGE StandaloneDeriving   #-}
    {-# LANGUAGE DeriveDataTypeable   #-}
    {-# LANGUAGE FlexibleContexts     #-}
    {-# LANGUAGE FlexibleInstances    #-}
    {-# LANGUAGE TypeApplications     #-}
    {-# LANGUAGE TypeFamilies         #-}
    {-# LANGUAGE UndecidableInstances #-} -- Wrinkle in Note [Trees That Grow]
                                          -- in module Language.Haskell.Syntax.Extension
    {-
    (c) The University of Glasgow 2006
    (c) The GRASP/AQUA Project, Glasgow University, 1992-1998

    GHC.Hs.ImpExp: Abstract syntax: imports, exports, interfaces
    -}

    module GHC.Hs.ImpExp
        ( module Language.Haskell.Syntax.ImpExp
        , module GHC.Hs.ImpExp
        ) where

    import Language.Haskell.Syntax.Extension
    import Language.Haskell.Syntax.Module.Name
    import Language.Haskell.Syntax.ImpExp

    import GHC.Prelude

    import GHC.Types.SourceText   ( SourceText(..) )
    import GHC.Types.SrcLoc
    import GHC.Types.Name
    import GHC.Types.PkgQual

    import GHC.Parser.Annotation
    import GHC.Hs.Extension

    import GHC.Utils.Outputable
    import GHC.Utils.Panic

    import GHC.Unit.Module.Warnings

    import Data.Data
    import Data.Maybe
    import GHC.Hs.Doc (LHsDoc)

    {-
    ************************************************************************
    *                                                                      *
        Import and export declaration lists
    *                                                                      *
    ************************************************************************

    One per import declaration in a module.
    -}

    type instance Anno (ImportDecl (GhcPass p)) = SrcSpanAnnA

    -- | Given two possible located 'qualified' tokens, compute a style
    -- (in a conforming Haskell program only one of the two can be not
    -- 'Nothing'). This is called from "GHC.Parser".
    importDeclQualifiedStyle :: Maybe (EpToken "qualified")
                             -> Maybe (EpToken "qualified")
                             -> (Maybe (EpToken "qualified"), ImportDeclQualifiedStyle)
    importDeclQualifiedStyle :: Maybe (EpToken "qualified")
    -> Maybe (EpToken "qualified")
    -> (Maybe (EpToken "qualified"), ImportDeclQualifiedStyle)
    importDeclQualifiedStyle Maybe (EpToken "qualified")
    mPre Maybe (EpToken "qualified")
    mPost =
      if Maybe (EpToken "qualified") -> Bool
    forall a. Maybe a -> Bool
    isJust Maybe (EpToken "qualified")
    mPre then (Maybe (EpToken "qualified")
    mPre, ImportDeclQualifiedStyle
    QualifiedPre)
      else if Maybe (EpToken "qualified") -> Bool
    forall a. Maybe a -> Bool
    isJust Maybe (EpToken "qualified")
    mPost then (Maybe (EpToken "qualified")
    mPost,ImportDeclQualifiedStyle
    QualifiedPost) else (Maybe (EpToken "qualified")
    forall a. Maybe a
    Nothing, ImportDeclQualifiedStyle
    NotQualified)

    -- | Convenience function to answer the question if an import decl. is
    -- qualified.
    isImportDeclQualified :: ImportDeclQualifiedStyle -> Bool
    isImportDeclQualified :: ImportDeclQualifiedStyle -> Bool
    isImportDeclQualified ImportDeclQualifiedStyle
    NotQualified = Bool
    False
    isImportDeclQualified ImportDeclQualifiedStyle
    _ = Bool
    True

    type instance ImportDeclPkgQual GhcPs = RawPkgQual
    type instance ImportDeclPkgQual GhcRn = PkgQual
    type instance ImportDeclPkgQual GhcTc = PkgQual

    type instance XCImportDecl  GhcPs = XImportDeclPass
    type instance XCImportDecl  GhcRn = XImportDeclPass
    type instance XCImportDecl  GhcTc = DataConCantHappen

    data XImportDeclPass = XImportDeclPass
        { XImportDeclPass -> EpAnn EpAnnImportDecl
    ideclAnn        :: EpAnn EpAnnImportDecl
        , XImportDeclPass -> SourceText
    ideclSourceText :: SourceText -- Note [Pragma source text] in "GHC.Types.SourceText"
        , XImportDeclPass -> Bool
    ideclImplicit   :: Bool
            -- ^ GHC generates an `ImportDecl` to represent the invisible `import Prelude`
            -- that appears in any file that omits `import Prelude`, setting
            -- this field to indicate that the import doesn't appear in the
            -- original source. True => implicit import (of Prelude)
        }
        deriving (Typeable XImportDeclPass
    Typeable XImportDeclPass =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> XImportDeclPass -> c XImportDeclPass)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c XImportDeclPass)
    -> (XImportDeclPass -> Constr)
    -> (XImportDeclPass -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c XImportDeclPass))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c XImportDeclPass))
    -> ((forall b. Data b => b -> b)
        -> XImportDeclPass -> XImportDeclPass)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> XImportDeclPass -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> XImportDeclPass -> r)
    -> (forall u.
        (forall d. Data d => d -> u) -> XImportDeclPass -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> XImportDeclPass -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d)
        -> XImportDeclPass -> m XImportDeclPass)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d)
        -> XImportDeclPass -> m XImportDeclPass)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d)
        -> XImportDeclPass -> m XImportDeclPass)
    -> Data XImportDeclPass
    XImportDeclPass -> Constr
    XImportDeclPass -> DataType
    (forall b. Data b => b -> b) -> XImportDeclPass -> XImportDeclPass
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u.
    Int -> (forall d. Data d => d -> u) -> XImportDeclPass -> u
    forall u. (forall d. Data d => d -> u) -> XImportDeclPass -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> XImportDeclPass -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> XImportDeclPass -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> XImportDeclPass -> m XImportDeclPass
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> XImportDeclPass -> m XImportDeclPass
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c XImportDeclPass
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> XImportDeclPass -> c XImportDeclPass
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c XImportDeclPass)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c XImportDeclPass)
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> XImportDeclPass -> c XImportDeclPass
    gfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> XImportDeclPass -> c XImportDeclPass
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c XImportDeclPass
    gunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c XImportDeclPass
    $ctoConstr :: XImportDeclPass -> Constr
    toConstr :: XImportDeclPass -> Constr
    $cdataTypeOf :: XImportDeclPass -> DataType
    dataTypeOf :: XImportDeclPass -> DataType
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c XImportDeclPass)
    dataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c XImportDeclPass)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c XImportDeclPass)
    dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c XImportDeclPass)
    $cgmapT :: (forall b. Data b => b -> b) -> XImportDeclPass -> XImportDeclPass
    gmapT :: (forall b. Data b => b -> b) -> XImportDeclPass -> XImportDeclPass
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> XImportDeclPass -> r
    gmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> XImportDeclPass -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> XImportDeclPass -> r
    gmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> XImportDeclPass -> r
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> XImportDeclPass -> [u]
    gmapQ :: forall u. (forall d. Data d => d -> u) -> XImportDeclPass -> [u]
    $cgmapQi :: forall u.
    Int -> (forall d. Data d => d -> u) -> XImportDeclPass -> u
    gmapQi :: forall u.
    Int -> (forall d. Data d => d -> u) -> XImportDeclPass -> u
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> XImportDeclPass -> m XImportDeclPass
    gmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> XImportDeclPass -> m XImportDeclPass
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> XImportDeclPass -> m XImportDeclPass
    gmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> XImportDeclPass -> m XImportDeclPass
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> XImportDeclPass -> m XImportDeclPass
    gmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> XImportDeclPass -> m XImportDeclPass
    Data)

    type instance XXImportDecl  (GhcPass _) = DataConCantHappen

    type instance Anno ModuleName = SrcSpanAnnA
    type instance Anno [LocatedA (IE (GhcPass p))] = SrcSpanAnnLI

    deriving instance Data (IEWrappedName GhcPs)
    deriving instance Data (IEWrappedName GhcRn)
    deriving instance Data (IEWrappedName GhcTc)

    deriving instance Eq (IEWrappedName GhcPs)
    deriving instance Eq (IEWrappedName GhcRn)
    deriving instance Eq (IEWrappedName GhcTc)

    -- ---------------------------------------------------------------------

    -- API Annotations types

    data EpAnnImportDecl = EpAnnImportDecl
      { EpAnnImportDecl -> EpToken "import"
    importDeclAnnImport    :: EpToken "import" -- ^ The location of the @import@ keyword
      , EpAnnImportDecl -> Maybe (EpaLocation, EpToken "#-}")
    importDeclAnnPragma    :: Maybe (EpaLocation, EpToken "#-}") -- ^ The locations of @{-# SOURCE@ and @#-}@ respectively
      , EpAnnImportDecl -> Maybe (EpToken "safe")
    importDeclAnnSafe      :: Maybe (EpToken "safe") -- ^ The location of the @safe@ keyword
      , EpAnnImportDecl -> Maybe (EpToken "qualified")
    importDeclAnnQualified :: Maybe (EpToken "qualified") -- ^ The location of the @qualified@ keyword
      , EpAnnImportDecl -> Maybe EpaLocation
    importDeclAnnPackage   :: Maybe EpaLocation -- ^ The location of the package name (when using @-XPackageImports@)
      , EpAnnImportDecl -> Maybe (EpToken "as")
    importDeclAnnAs        :: Maybe (EpToken "as") -- ^ The location of the @as@ keyword
      } deriving (Typeable EpAnnImportDecl
    Typeable EpAnnImportDecl =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> EpAnnImportDecl -> c EpAnnImportDecl)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c EpAnnImportDecl)
    -> (EpAnnImportDecl -> Constr)
    -> (EpAnnImportDecl -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c EpAnnImportDecl))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e))
        -> Maybe (c EpAnnImportDecl))
    -> ((forall b. Data b => b -> b)
        -> EpAnnImportDecl -> EpAnnImportDecl)
    -> (forall r r'.
        (r -> r' -> r)
        -> r -> (forall d. Data d => d -> r') -> EpAnnImportDecl -> r)
    -> (forall r r'.
        (r' -> r -> r)
        -> r -> (forall d. Data d => d -> r') -> EpAnnImportDecl -> r)
    -> (forall u.
        (forall d. Data d => d -> u) -> EpAnnImportDecl -> [u])
    -> (forall u.
        Int -> (forall d. Data d => d -> u) -> EpAnnImportDecl -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d)
        -> EpAnnImportDecl -> m EpAnnImportDecl)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d)
        -> EpAnnImportDecl -> m EpAnnImportDecl)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d)
        -> EpAnnImportDecl -> m EpAnnImportDecl)
    -> Data EpAnnImportDecl
    EpAnnImportDecl -> Constr
    EpAnnImportDecl -> DataType
    (forall b. Data b => b -> b) -> EpAnnImportDecl -> EpAnnImportDecl
    forall a.
    Typeable a =>
    (forall (c :: * -> *).
     (forall d b. Data d => c (d -> b) -> d -> c b)
     -> (forall g. g -> c g) -> a -> c a)
    -> (forall (c :: * -> *).
        (forall b r. Data b => c (b -> r) -> c r)
        -> (forall r. r -> c r) -> Constr -> c a)
    -> (a -> Constr)
    -> (a -> DataType)
    -> (forall (t :: * -> *) (c :: * -> *).
        Typeable t =>
        (forall d. Data d => c (t d)) -> Maybe (c a))
    -> (forall (t :: * -> * -> *) (c :: * -> *).
        Typeable t =>
        (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
    -> ((forall b. Data b => b -> b) -> a -> a)
    -> (forall r r'.
        (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall r r'.
        (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
    -> (forall u. (forall d. Data d => d -> u) -> a -> [u])
    -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
    -> (forall (m :: * -> *).
        Monad m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> (forall (m :: * -> *).
        MonadPlus m =>
        (forall d. Data d => d -> m d) -> a -> m a)
    -> Data a
    forall u.
    Int -> (forall d. Data d => d -> u) -> EpAnnImportDecl -> u
    forall u. (forall d. Data d => d -> u) -> EpAnnImportDecl -> [u]
    forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> EpAnnImportDecl -> r
    forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> EpAnnImportDecl -> r
    forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> EpAnnImportDecl -> m EpAnnImportDecl
    forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> EpAnnImportDecl -> m EpAnnImportDecl
    forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c EpAnnImportDecl
    forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> EpAnnImportDecl -> c EpAnnImportDecl
    forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c EpAnnImportDecl)
    forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c EpAnnImportDecl)
    $cgfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> EpAnnImportDecl -> c EpAnnImportDecl
    gfoldl :: forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> EpAnnImportDecl -> c EpAnnImportDecl
    $cgunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c EpAnnImportDecl
    gunfold :: forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c EpAnnImportDecl
    $ctoConstr :: EpAnnImportDecl -> Constr
    toConstr :: EpAnnImportDecl -> Constr
    $cdataTypeOf :: EpAnnImportDecl -> DataType
    dataTypeOf :: EpAnnImportDecl -> DataType
    $cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c EpAnnImportDecl)
    dataCast1 :: forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c EpAnnImportDecl)
    $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c EpAnnImportDecl)
    dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c EpAnnImportDecl)
    $cgmapT :: (forall b. Data b => b -> b) -> EpAnnImportDecl -> EpAnnImportDecl
    gmapT :: (forall b. Data b => b -> b) -> EpAnnImportDecl -> EpAnnImportDecl
    $cgmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> EpAnnImportDecl -> r
    gmapQl :: forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> EpAnnImportDecl -> r
    $cgmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> EpAnnImportDecl -> r
    gmapQr :: forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> EpAnnImportDecl -> r
    $cgmapQ :: forall u. (forall d. Data d => d -> u) -> EpAnnImportDecl -> [u]
    gmapQ :: forall u. (forall d. Data d => d -> u) -> EpAnnImportDecl -> [u]
    $cgmapQi :: forall u.
    Int -> (forall d. Data d => d -> u) -> EpAnnImportDecl -> u
    gmapQi :: forall u.
    Int -> (forall d. Data d => d -> u) -> EpAnnImportDecl -> u
    $cgmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> EpAnnImportDecl -> m EpAnnImportDecl
    gmapM :: forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> EpAnnImportDecl -> m EpAnnImportDecl
    $cgmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> EpAnnImportDecl -> m EpAnnImportDecl
    gmapMp :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> EpAnnImportDecl -> m EpAnnImportDecl
    $cgmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> EpAnnImportDecl -> m EpAnnImportDecl
    gmapMo :: forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> EpAnnImportDecl -> m EpAnnImportDecl
    Data)

    instance NoAnn EpAnnImportDecl where
      noAnn :: EpAnnImportDecl
    noAnn = EpToken "import"
    -> Maybe (EpaLocation, EpToken "#-}")
    -> Maybe (EpToken "safe")
    -> Maybe (EpToken "qualified")
    -> Maybe EpaLocation
    -> Maybe (EpToken "as")
    -> EpAnnImportDecl
    EpAnnImportDecl EpToken "import"
    forall a. NoAnn a => a
    noAnn  Maybe (EpaLocation, EpToken "#-}")
    forall a. Maybe a
    Nothing  Maybe (EpToken "safe")
    forall a. Maybe a
    Nothing  Maybe (EpToken "qualified")
    forall a. Maybe a
    Nothing  Maybe EpaLocation
    forall a. Maybe a
    Nothing  Maybe (EpToken "as")
    forall a. Maybe a
    Nothing
    -- ---------------------------------------------------------------------

    simpleImportDecl :: ModuleName -> ImportDecl GhcPs
    simpleImportDecl :: ModuleName -> ImportDecl GhcPs
    simpleImportDecl ModuleName
    mn = ImportDecl {
          ideclExt :: XCImportDecl GhcPs
    ideclExt        = EpAnn EpAnnImportDecl -> SourceText -> Bool -> XImportDeclPass
    XImportDeclPass EpAnn EpAnnImportDecl
    forall a. NoAnn a => a
    noAnn SourceText
    NoSourceText Bool
    False,
          ideclName :: XRec GhcPs ModuleName
    ideclName       = ModuleName -> GenLocated SrcSpanAnnA ModuleName
    forall e a. HasAnnotation e => a -> GenLocated e a
    noLocA ModuleName
    mn,
          ideclPkgQual :: ImportDeclPkgQual GhcPs
    ideclPkgQual    = ImportDeclPkgQual GhcPs
    RawPkgQual
    NoRawPkgQual,
          ideclSource :: IsBootInterface
    ideclSource     = IsBootInterface
    NotBoot,
          ideclSafe :: Bool
    ideclSafe       = Bool
    False,
          ideclQualified :: ImportDeclQualifiedStyle
    ideclQualified  = ImportDeclQualifiedStyle
    NotQualified,
          ideclAs :: Maybe (XRec GhcPs ModuleName)
    ideclAs         = Maybe (XRec GhcPs ModuleName)
    Maybe (GenLocated SrcSpanAnnA ModuleName)
    forall a. Maybe a
    Nothing,
          ideclImportList :: Maybe (ImportListInterpretation, XRec GhcPs [LIE GhcPs])
    ideclImportList = Maybe (ImportListInterpretation, XRec GhcPs [LIE GhcPs])
    Maybe
      (ImportListInterpretation,
       GenLocated SrcSpanAnnLI [GenLocated SrcSpanAnnA (IE GhcPs)])
    forall a. Maybe a
    Nothing
        }

    instance (OutputableBndrId p
             , Outputable (Anno (IE (GhcPass p)))
             , Outputable (ImportDeclPkgQual (GhcPass p)))
           => Outputable (ImportDecl (GhcPass p)) where
        ppr :: ImportDecl (GhcPass p) -> SDoc
    ppr (ImportDecl { ideclExt :: forall pass. ImportDecl pass -> XCImportDecl pass
    ideclExt = XCImportDecl (GhcPass p)
    impExt, ideclName :: forall pass. ImportDecl pass -> XRec pass ModuleName
    ideclName = XRec (GhcPass p) ModuleName
    mod'
                        , ideclPkgQual :: forall pass. ImportDecl pass -> ImportDeclPkgQual pass
    ideclPkgQual = ImportDeclPkgQual (GhcPass p)
    pkg
                        , ideclSource :: forall pass. ImportDecl pass -> IsBootInterface
    ideclSource = IsBootInterface
    from, ideclSafe :: forall pass. ImportDecl pass -> Bool
    ideclSafe = Bool
    safe
                        , ideclQualified :: forall pass. ImportDecl pass -> ImportDeclQualifiedStyle
    ideclQualified = ImportDeclQualifiedStyle
    qual
                        , ideclAs :: forall pass. ImportDecl pass -> Maybe (XRec pass ModuleName)
    ideclAs = Maybe (XRec (GhcPass p) ModuleName)
    as, ideclImportList :: forall pass.
    ImportDecl pass
    -> Maybe (ImportListInterpretation, XRec pass [LIE pass])
    ideclImportList = Maybe
      (ImportListInterpretation, XRec (GhcPass p) [LIE (GhcPass p)])
    spec })
          = SDoc -> Int -> SDoc -> SDoc
    hang ([SDoc] -> SDoc
    forall doc. IsLine doc => [doc] -> doc
    hsep [String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "import", XCImportDecl (GhcPass p) -> IsBootInterface -> SDoc
    ppr_imp XCImportDecl (GhcPass p)
    impExt IsBootInterface
    from, XCImportDecl (GhcPass p) -> SDoc
    pp_implicit XCImportDecl (GhcPass p)
    impExt, Bool -> SDoc
    forall {doc}. IsLine doc => Bool -> doc
    pp_safe Bool
    safe,
                        ImportDeclQualifiedStyle -> Bool -> SDoc
    forall {doc}. IsLine doc => ImportDeclQualifiedStyle -> Bool -> doc
    pp_qual ImportDeclQualifiedStyle
    qual Bool
    False, ImportDeclPkgQual (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr ImportDeclPkgQual (GhcPass p)
    pkg, GenLocated SrcSpanAnnA ModuleName -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr XRec (GhcPass p) ModuleName
    GenLocated SrcSpanAnnA ModuleName
    mod', ImportDeclQualifiedStyle -> Bool -> SDoc
    forall {doc}. IsLine doc => ImportDeclQualifiedStyle -> Bool -> doc
    pp_qual ImportDeclQualifiedStyle
    qual Bool
    True, Maybe (GenLocated SrcSpanAnnA ModuleName) -> SDoc
    forall {a}. Outputable a => Maybe a -> SDoc
    pp_as Maybe (XRec (GhcPass p) ModuleName)
    Maybe (GenLocated SrcSpanAnnA ModuleName)
    as])
                 Int
    4 (Maybe
      (ImportListInterpretation,
       GenLocated SrcSpanAnnLI [GenLocated SrcSpanAnnA (IE (GhcPass p))])
    -> SDoc
    forall {a} {l}.
    Outputable a =>
    Maybe (ImportListInterpretation, GenLocated l [a]) -> SDoc
    pp_spec Maybe
      (ImportListInterpretation, XRec (GhcPass p) [LIE (GhcPass p)])
    Maybe
      (ImportListInterpretation,
       GenLocated SrcSpanAnnLI [GenLocated SrcSpanAnnA (IE (GhcPass p))])
    spec)
          where
            pp_implicit :: XCImportDecl (GhcPass p) -> SDoc
    pp_implicit XCImportDecl (GhcPass p)
    ext =
                let implicit :: Bool
    implicit = case forall (p :: Pass). IsPass p => GhcPass p
    ghcPass @p of
                                GhcPass p
    GhcPs | XImportDeclPass { ideclImplicit :: XImportDeclPass -> Bool
    ideclImplicit = Bool
    implicit } <- XCImportDecl (GhcPass p)
    ext -> Bool
    implicit
                                GhcPass p
    GhcRn | XImportDeclPass { ideclImplicit :: XImportDeclPass -> Bool
    ideclImplicit = Bool
    implicit } <- XCImportDecl (GhcPass p)
    ext -> Bool
    implicit
                                GhcPass p
    GhcTc -> DataConCantHappen -> Bool
    forall a. DataConCantHappen -> a
    dataConCantHappen XCImportDecl (GhcPass p)
    DataConCantHappen
    ext
                in if Bool
    implicit then String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "(implicit)"
                               else SDoc
    forall doc. IsOutput doc => doc
    empty

            pp_qual :: ImportDeclQualifiedStyle -> Bool -> doc
    pp_qual ImportDeclQualifiedStyle
    QualifiedPre Bool
    False = String -> doc
    forall doc. IsLine doc => String -> doc
    text String
    "qualified" -- Prepositive qualifier/prepositive position.
            pp_qual ImportDeclQualifiedStyle
    QualifiedPost Bool
    True = String -> doc
    forall doc. IsLine doc => String -> doc
    text String
    "qualified" -- Postpositive qualifier/postpositive position.
            pp_qual ImportDeclQualifiedStyle
    QualifiedPre Bool
    True = doc
    forall doc. IsOutput doc => doc
    empty -- Prepositive qualifier/postpositive position.
            pp_qual ImportDeclQualifiedStyle
    QualifiedPost Bool
    False = doc
    forall doc. IsOutput doc => doc
    empty -- Postpositive qualifier/prepositive position.
            pp_qual ImportDeclQualifiedStyle
    NotQualified Bool
    _ = doc
    forall doc. IsOutput doc => doc
    empty

            pp_safe :: Bool -> doc
    pp_safe Bool
    False   = doc
    forall doc. IsOutput doc => doc
    empty
            pp_safe Bool
    True    = String -> doc
    forall doc. IsLine doc => String -> doc
    text String
    "safe"

            pp_as :: Maybe a -> SDoc
    pp_as Maybe a
    Nothing   = SDoc
    forall doc. IsOutput doc => doc
    empty
            pp_as (Just a
    a)  = String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "as" SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> a -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr a
    a

            ppr_imp :: XCImportDecl (GhcPass p) -> IsBootInterface -> SDoc
    ppr_imp XCImportDecl (GhcPass p)
    ext IsBootInterface
    IsBoot =
                let mSrcText :: SourceText
    mSrcText = case forall (p :: Pass). IsPass p => GhcPass p
    ghcPass @p of
                                    GhcPass p
    GhcPs | XImportDeclPass { ideclSourceText :: XImportDeclPass -> SourceText
    ideclSourceText = SourceText
    mst } <- XCImportDecl (GhcPass p)
    ext -> SourceText
    mst
                                    GhcPass p
    GhcRn | XImportDeclPass { ideclSourceText :: XImportDeclPass -> SourceText
    ideclSourceText = SourceText
    mst } <- XCImportDecl (GhcPass p)
    ext -> SourceText
    mst
                                    GhcPass p
    GhcTc -> DataConCantHappen -> SourceText
    forall a. DataConCantHappen -> a
    dataConCantHappen XCImportDecl (GhcPass p)
    DataConCantHappen
    ext
                in case SourceText
    mSrcText of
                      SourceText
    NoSourceText   -> String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "{-# SOURCE #-}"
                      SourceText FastString
    src -> FastString -> SDoc
    forall doc. IsLine doc => FastString -> doc
    ftext FastString
    src SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "#-}"
            ppr_imp XCImportDecl (GhcPass p)
    _ IsBootInterface
    NotBoot = SDoc
    forall doc. IsOutput doc => doc
    empty

            pp_spec :: Maybe (ImportListInterpretation, GenLocated l [a]) -> SDoc
    pp_spec Maybe (ImportListInterpretation, GenLocated l [a])
    Nothing             = SDoc
    forall doc. IsOutput doc => doc
    empty
            pp_spec (Just (ImportListInterpretation
    Exactly, (L l
    _ [a]
    ies))) = [a] -> SDoc
    forall {a}. Outputable a => [a] -> SDoc
    ppr_ies [a]
    ies
            pp_spec (Just (ImportListInterpretation
    EverythingBut, (L l
    _ [a]
    ies))) = String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "hiding" SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> [a] -> SDoc
    forall {a}. Outputable a => [a] -> SDoc
    ppr_ies [a]
    ies

            ppr_ies :: [a] -> SDoc
    ppr_ies []  = String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "()"
            ppr_ies [a]
    ies = Char -> SDoc
    forall doc. IsLine doc => Char -> doc
    char Char
    '(' SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> [a] -> SDoc
    forall {a}. Outputable a => [a] -> SDoc
    interpp'SP [a]
    ies SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> Char -> SDoc
    forall doc. IsLine doc => Char -> doc
    char Char
    ')'

    {-
    ************************************************************************
    *                                                                      *
    \subsection{Imported and exported entities}
    *                                                                      *
    ************************************************************************
    -}

    type instance XIEName    (GhcPass _) = NoExtField
    type instance XIEDefault (GhcPass _) = EpToken "default"
    type instance XIEPattern (GhcPass _) = EpToken "pattern"
    type instance XIEType    (GhcPass _) = EpToken "type"
    type instance XXIEWrappedName (GhcPass _) = DataConCantHappen

    type instance Anno (IEWrappedName (GhcPass _)) = SrcSpanAnnA

    type instance Anno (IE (GhcPass p)) = SrcSpanAnnA

    -- The additional field of type 'Maybe (WarningTxt pass)' holds information
    -- about export deprecation annotations and is thus set to Nothing when `IE`
    -- is used in an import list (since export deprecation can only be used in exports)
    type instance XIEVar       GhcPs = Maybe (LWarningTxt GhcPs)
    type instance XIEVar       GhcRn = Maybe (LWarningTxt GhcRn)
    type instance XIEVar       GhcTc = NoExtField

    -- The additional field of type 'Maybe (WarningTxt pass)' holds information
    -- about export deprecation annotations and is thus set to Nothing when `IE`
    -- is used in an import list (since export deprecation can only be used in exports)
    type instance XIEThingAbs  GhcPs = Maybe (LWarningTxt GhcPs)
    type instance XIEThingAbs  GhcRn = Maybe (LWarningTxt GhcRn)
    type instance XIEThingAbs  GhcTc = ()

    -- The additional field of type 'Maybe (WarningTxt pass)' holds information
    -- about export deprecation annotations and is thus set to Nothing when `IE`
    -- is used in an import list (since export deprecation can only be used in exports)
    type instance XIEThingAll  GhcPs = (Maybe (LWarningTxt GhcPs), (EpToken "(", EpToken "..", EpToken ")"))
    type instance XIEThingAll  GhcRn = (Maybe (LWarningTxt GhcRn), (EpToken "(", EpToken "..", EpToken ")"))
    type instance XIEThingAll  GhcTc = (EpToken "(", EpToken "..", EpToken ")")

    -- The additional field of type 'Maybe (WarningTxt pass)' holds information
    -- about export deprecation annotations and is thus set to Nothing when `IE`
    -- is used in an import list (since export deprecation can only be used in exports)
    type instance XIEThingWith GhcPs = (Maybe (LWarningTxt GhcPs), IEThingWithAnns)
    type instance XIEThingWith GhcRn = (Maybe (LWarningTxt GhcRn), IEThingWithAnns)
    type instance XIEThingWith GhcTc = IEThingWithAnns

    type IEThingWithAnns = (EpToken "(", EpToken "..", EpToken ",", EpToken ")")

    -- The additional field of type 'Maybe (WarningTxt pass)' holds information
    -- about export deprecation annotations and is thus set to Nothing when `IE`
    -- is used in an import list (since export deprecation can only be used in exports)
    type instance XIEModuleContents  GhcPs = (Maybe (LWarningTxt GhcPs), EpToken "module")
    type instance XIEModuleContents  GhcRn = Maybe (LWarningTxt GhcRn)
    type instance XIEModuleContents  GhcTc = NoExtField

    type instance XIEGroup           (GhcPass _) = NoExtField
    type instance XIEDoc             (GhcPass _) = NoExtField
    type instance XIEDocNamed        (GhcPass _) = NoExtField
    type instance XXIE               (GhcPass _) = DataConCantHappen

    type instance Anno (LocatedA (IE (GhcPass p))) = SrcSpanAnnA

    ieName :: IE (GhcPass p) -> IdP (GhcPass p)
    ieName :: forall (p :: Pass). IE (GhcPass p) -> IdP (GhcPass p)
    ieName (IEVar XIEVar (GhcPass p)
    _ (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) Maybe (ExportDoc (GhcPass p))
    _)           = IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    n
    ieName (IEThingAbs  XIEThingAbs (GhcPass p)
    _ (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) Maybe (ExportDoc (GhcPass p))
    _)     = IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    n
    ieName (IEThingWith XIEThingWith (GhcPass p)
    _ (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) IEWildcard
    _ [LIEWrappedName (GhcPass p)]
    _ Maybe (ExportDoc (GhcPass p))
    _) = IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    n
    ieName (IEThingAll  XIEThingAll (GhcPass p)
    _ (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) Maybe (ExportDoc (GhcPass p))
    _)     = IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    n
    ieName IE (GhcPass p)
    _ = String -> IdGhcP p
    forall a. HasCallStack => String -> a
    panic String
    "ieName failed pattern match!"

    ieNames :: IE (GhcPass p) -> [IdP (GhcPass p)]
    ieNames :: forall (p :: Pass). IE (GhcPass p) -> [IdP (GhcPass p)]
    ieNames (IEVar       XIEVar (GhcPass p)
    _ (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) Maybe (ExportDoc (GhcPass p))
    _)      = [IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    n]
    ieNames (IEThingAbs  XIEThingAbs (GhcPass p)
    _ (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) Maybe (ExportDoc (GhcPass p))
    _)      = [IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    n]
    ieNames (IEThingAll  XIEThingAll (GhcPass p)
    _ (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) Maybe (ExportDoc (GhcPass p))
    _)      = [IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    n]
    ieNames (IEThingWith XIEThingWith (GhcPass p)
    _ (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) IEWildcard
    _ [LIEWrappedName (GhcPass p)]
    ns Maybe (ExportDoc (GhcPass p))
    _) = IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    n IdGhcP p -> [IdGhcP p] -> [IdGhcP p]
    forall a. a -> [a] -> [a]
    : (GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p)) -> IdGhcP p)
    -> [GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))]
    -> [IdGhcP p]
    forall a b. (a -> b) -> [a] -> [b]
    map (IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    IEWrappedName (GhcPass p) -> IdGhcP p
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName (IEWrappedName (GhcPass p) -> IdGhcP p)
    -> (GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
        -> IEWrappedName (GhcPass p))
    -> GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> IdGhcP p
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> IEWrappedName (GhcPass p)
    forall l e. GenLocated l e -> e
    unLoc) [LIEWrappedName (GhcPass p)]
    [GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))]
    ns
    -- NB the above case does not include names of field selectors
    ieNames (IEModuleContents {})     = []
    ieNames (IEGroup          {})     = []
    ieNames (IEDoc            {})     = []
    ieNames (IEDocNamed       {})     = []

    ieDeprecation :: forall p. IsPass p => IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    ieDeprecation :: forall (p :: Pass).
    IsPass p =>
    IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    ieDeprecation = (GenLocated SrcSpanAnnP (WarningTxt (GhcPass p))
     -> WarningTxt (GhcPass p))
    -> Maybe (GenLocated SrcSpanAnnP (WarningTxt (GhcPass p)))
    -> Maybe (WarningTxt (GhcPass p))
    forall a b. (a -> b) -> Maybe a -> Maybe b
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    fmap GenLocated SrcSpanAnnP (WarningTxt (GhcPass p))
    -> WarningTxt (GhcPass p)
    forall l e. GenLocated l e -> e
    unLoc (Maybe (GenLocated SrcSpanAnnP (WarningTxt (GhcPass p)))
     -> Maybe (WarningTxt (GhcPass p)))
    -> (IE (GhcPass p)
        -> Maybe (GenLocated SrcSpanAnnP (WarningTxt (GhcPass p))))
    -> IE (GhcPass p)
    -> Maybe (WarningTxt (GhcPass p))
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . GhcPass p -> IE (GhcPass p) -> Maybe (LWarningTxt (GhcPass p))
    ie_deprecation (forall (p :: Pass). IsPass p => GhcPass p
    ghcPass @p)
      where
        ie_deprecation :: GhcPass p -> IE (GhcPass p) -> Maybe (LWarningTxt (GhcPass p))
        ie_deprecation :: GhcPass p -> IE (GhcPass p) -> Maybe (LWarningTxt (GhcPass p))
    ie_deprecation GhcPass p
    GhcPs (IEVar XIEVar (GhcPass p)
    xie LIEWrappedName (GhcPass p)
    _ Maybe (ExportDoc (GhcPass p))
    _) = Maybe (LWarningTxt (GhcPass p))
    XIEVar (GhcPass p)
    xie
        ie_deprecation GhcPass p
    GhcPs (IEThingAbs XIEThingAbs (GhcPass p)
    xie LIEWrappedName (GhcPass p)
    _ Maybe (ExportDoc (GhcPass p))
    _) = Maybe (LWarningTxt (GhcPass p))
    XIEThingAbs (GhcPass p)
    xie
        ie_deprecation GhcPass p
    GhcPs (IEThingAll (Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcPs))
    xie, (EpToken "(", EpToken "..", EpToken ")")
    _) LIEWrappedName (GhcPass p)
    _ Maybe (ExportDoc (GhcPass p))
    _) = Maybe (LWarningTxt (GhcPass p))
    Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcPs))
    xie
        ie_deprecation GhcPass p
    GhcPs (IEThingWith (Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcPs))
    xie, IEThingWithAnns
    _) LIEWrappedName (GhcPass p)
    _ IEWildcard
    _ [LIEWrappedName (GhcPass p)]
    _ Maybe (ExportDoc (GhcPass p))
    _) = Maybe (LWarningTxt (GhcPass p))
    Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcPs))
    xie
        ie_deprecation GhcPass p
    GhcPs (IEModuleContents (Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcPs))
    xie, EpToken "module"
    _) XRec (GhcPass p) ModuleName
    _) = Maybe (LWarningTxt (GhcPass p))
    Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcPs))
    xie
        ie_deprecation GhcPass p
    GhcRn (IEVar XIEVar (GhcPass p)
    xie LIEWrappedName (GhcPass p)
    _ Maybe (ExportDoc (GhcPass p))
    _) = Maybe (LWarningTxt (GhcPass p))
    XIEVar (GhcPass p)
    xie
        ie_deprecation GhcPass p
    GhcRn (IEThingAbs XIEThingAbs (GhcPass p)
    xie LIEWrappedName (GhcPass p)
    _ Maybe (ExportDoc (GhcPass p))
    _) = Maybe (LWarningTxt (GhcPass p))
    XIEThingAbs (GhcPass p)
    xie
        ie_deprecation GhcPass p
    GhcRn (IEThingAll (Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcRn))
    xie, (EpToken "(", EpToken "..", EpToken ")")
    _) LIEWrappedName (GhcPass p)
    _ Maybe (ExportDoc (GhcPass p))
    _) = Maybe (LWarningTxt (GhcPass p))
    Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcRn))
    xie
        ie_deprecation GhcPass p
    GhcRn (IEThingWith (Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcRn))
    xie, IEThingWithAnns
    _) LIEWrappedName (GhcPass p)
    _ IEWildcard
    _ [LIEWrappedName (GhcPass p)]
    _ Maybe (ExportDoc (GhcPass p))
    _) = Maybe (LWarningTxt (GhcPass p))
    Maybe (GenLocated SrcSpanAnnP (WarningTxt GhcRn))
    xie
        ie_deprecation GhcPass p
    GhcRn (IEModuleContents XIEModuleContents (GhcPass p)
    xie XRec (GhcPass p) ModuleName
    _) = Maybe (LWarningTxt (GhcPass p))
    XIEModuleContents (GhcPass p)
    xie
        ie_deprecation GhcPass p
    _ IE (GhcPass p)
    _ = Maybe (LWarningTxt (GhcPass p))
    Maybe (GenLocated SrcSpanAnnP (WarningTxt (GhcPass p)))
    forall a. Maybe a
    Nothing

    ieWrappedLName :: IEWrappedName (GhcPass p) -> LIdP (GhcPass p)
    ieWrappedLName :: forall (p :: Pass). IEWrappedName (GhcPass p) -> LIdP (GhcPass p)
    ieWrappedLName (IEDefault XIEDefault (GhcPass p)
    _ (L Anno (IdGhcP p)
    l IdGhcP p
    n)) = Anno (IdGhcP p)
    -> IdGhcP p -> GenLocated (Anno (IdGhcP p)) (IdGhcP p)
    forall l e. l -> e -> GenLocated l e
    L Anno (IdGhcP p)
    l IdGhcP p
    n
    ieWrappedLName (IEName    XIEName (GhcPass p)
    _ (L Anno (IdGhcP p)
    l IdGhcP p
    n)) = Anno (IdGhcP p)
    -> IdGhcP p -> GenLocated (Anno (IdGhcP p)) (IdGhcP p)
    forall l e. l -> e -> GenLocated l e
    L Anno (IdGhcP p)
    l IdGhcP p
    n
    ieWrappedLName (IEPattern XIEPattern (GhcPass p)
    _ (L Anno (IdGhcP p)
    l IdGhcP p
    n)) = Anno (IdGhcP p)
    -> IdGhcP p -> GenLocated (Anno (IdGhcP p)) (IdGhcP p)
    forall l e. l -> e -> GenLocated l e
    L Anno (IdGhcP p)
    l IdGhcP p
    n
    ieWrappedLName (IEType    XIEType (GhcPass p)
    _ (L Anno (IdGhcP p)
    l IdGhcP p
    n)) = Anno (IdGhcP p)
    -> IdGhcP p -> GenLocated (Anno (IdGhcP p)) (IdGhcP p)
    forall l e. l -> e -> GenLocated l e
    L Anno (IdGhcP p)
    l IdGhcP p
    n

    ieWrappedName :: IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName :: forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName = GenLocated (Anno (IdGhcP p)) (IdGhcP p) -> IdGhcP p
    forall l e. GenLocated l e -> e
    unLoc (GenLocated (Anno (IdGhcP p)) (IdGhcP p) -> IdGhcP p)
    -> (IEWrappedName (GhcPass p)
        -> GenLocated (Anno (IdGhcP p)) (IdGhcP p))
    -> IEWrappedName (GhcPass p)
    -> IdGhcP p
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . IEWrappedName (GhcPass p) -> LIdP (GhcPass p)
    IEWrappedName (GhcPass p)
    -> GenLocated (Anno (IdGhcP p)) (IdGhcP p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> LIdP (GhcPass p)
    ieWrappedLName

    lieWrappedName :: LIEWrappedName (GhcPass p) -> IdP (GhcPass p)
    lieWrappedName :: forall (p :: Pass). LIEWrappedName (GhcPass p) -> IdP (GhcPass p)
    lieWrappedName (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) = IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    n

    ieLWrappedName :: LIEWrappedName (GhcPass p) -> LIdP (GhcPass p)
    ieLWrappedName :: forall (p :: Pass). LIEWrappedName (GhcPass p) -> LIdP (GhcPass p)
    ieLWrappedName (L SrcSpanAnnA
    _ IEWrappedName (GhcPass p)
    n) = IEWrappedName (GhcPass p) -> LIdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> LIdP (GhcPass p)
    ieWrappedLName IEWrappedName (GhcPass p)
    n

    replaceWrappedName :: IEWrappedName GhcPs -> IdP GhcRn -> IEWrappedName GhcRn
    replaceWrappedName :: IEWrappedName GhcPs -> IdP GhcRn -> IEWrappedName GhcRn
    replaceWrappedName (IEDefault XIEDefault GhcPs
    r (L SrcSpanAnnN
    l RdrName
    _)) IdP GhcRn
    n = XIEDefault GhcRn -> LIdP GhcRn -> IEWrappedName GhcRn
    forall p. XIEDefault p -> LIdP p -> IEWrappedName p
    IEDefault XIEDefault GhcPs
    XIEDefault GhcRn
    r (SrcSpanAnnN -> Name -> GenLocated SrcSpanAnnN Name
    forall l e. l -> e -> GenLocated l e
    L SrcSpanAnnN
    l IdP GhcRn
    Name
    n)
    replaceWrappedName (IEName    XIEName GhcPs
    x (L SrcSpanAnnN
    l RdrName
    _)) IdP GhcRn
    n = XIEName GhcRn -> LIdP GhcRn -> IEWrappedName GhcRn
    forall p. XIEName p -> LIdP p -> IEWrappedName p
    IEName    XIEName GhcPs
    XIEName GhcRn
    x (SrcSpanAnnN -> Name -> GenLocated SrcSpanAnnN Name
    forall l e. l -> e -> GenLocated l e
    L SrcSpanAnnN
    l IdP GhcRn
    Name
    n)
    replaceWrappedName (IEPattern XIEPattern GhcPs
    r (L SrcSpanAnnN
    l RdrName
    _)) IdP GhcRn
    n = XIEPattern GhcRn -> LIdP GhcRn -> IEWrappedName GhcRn
    forall p. XIEPattern p -> LIdP p -> IEWrappedName p
    IEPattern XIEPattern GhcPs
    XIEPattern GhcRn
    r (SrcSpanAnnN -> Name -> GenLocated SrcSpanAnnN Name
    forall l e. l -> e -> GenLocated l e
    L SrcSpanAnnN
    l IdP GhcRn
    Name
    n)
    replaceWrappedName (IEType    XIEType GhcPs
    r (L SrcSpanAnnN
    l RdrName
    _)) IdP GhcRn
    n = XIEType GhcRn -> LIdP GhcRn -> IEWrappedName GhcRn
    forall p. XIEType p -> LIdP p -> IEWrappedName p
    IEType    XIEType GhcPs
    XIEType GhcRn
    r (SrcSpanAnnN -> Name -> GenLocated SrcSpanAnnN Name
    forall l e. l -> e -> GenLocated l e
    L SrcSpanAnnN
    l IdP GhcRn
    Name
    n)

    replaceLWrappedName :: LIEWrappedName GhcPs -> IdP GhcRn -> LIEWrappedName GhcRn
    replaceLWrappedName :: LIEWrappedName GhcPs -> IdP GhcRn -> LIEWrappedName GhcRn
    replaceLWrappedName (L SrcSpanAnnA
    l IEWrappedName GhcPs
    n) IdP GhcRn
    n' = SrcSpanAnnA
    -> IEWrappedName GhcRn
    -> GenLocated SrcSpanAnnA (IEWrappedName GhcRn)
    forall l e. l -> e -> GenLocated l e
    L SrcSpanAnnA
    l (IEWrappedName GhcPs -> IdP GhcRn -> IEWrappedName GhcRn
    replaceWrappedName IEWrappedName GhcPs
    n IdP GhcRn
    n')

    exportDocstring :: LHsDoc pass -> SDoc
    exportDocstring :: forall pass. LHsDoc pass -> SDoc
    exportDocstring LHsDoc pass
    doc = SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc
    braces (String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "docstring: " SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <> LHsDoc pass -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr LHsDoc pass
    doc)

    instance OutputableBndrId p => Outputable (IE (GhcPass p)) where
        ppr :: IE (GhcPass p) -> SDoc
    ppr ie :: IE (GhcPass p)
    ie@(IEVar       XIEVar (GhcPass p)
    _     LIEWrappedName (GhcPass p)
    var Maybe (LHsDoc (GhcPass p))
    doc) =
          [SDoc] -> SDoc
    forall doc. IsLine doc => [doc] -> doc
    sep ([SDoc] -> SDoc) -> [SDoc] -> SDoc
    forall a b. (a -> b) -> a -> b
    $ [Maybe SDoc] -> [SDoc]
    forall a. [Maybe a] -> [a]
    catMaybes [ WarningTxt (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (WarningTxt (GhcPass p) -> SDoc)
    -> Maybe (WarningTxt (GhcPass p)) -> Maybe SDoc
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    forall (p :: Pass).
    IsPass p =>
    IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    ieDeprecation IE (GhcPass p)
    ie
                          , SDoc -> Maybe SDoc
    forall a. a -> Maybe a
    Just (SDoc -> Maybe SDoc) -> SDoc -> Maybe SDoc
    forall a b. (a -> b) -> a -> b
    $ IEWrappedName (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> IEWrappedName (GhcPass p)
    forall l e. GenLocated l e -> e
    unLoc LIEWrappedName (GhcPass p)
    GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    var)
                          , LHsDoc (GhcPass p) -> SDoc
    forall pass. LHsDoc pass -> SDoc
    exportDocstring (LHsDoc (GhcPass p) -> SDoc)
    -> Maybe (LHsDoc (GhcPass p)) -> Maybe SDoc
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> Maybe (LHsDoc (GhcPass p))
    doc
                          ]
        ppr ie :: IE (GhcPass p)
    ie@(IEThingAbs  XIEThingAbs (GhcPass p)
    _   LIEWrappedName (GhcPass p)
    thing Maybe (LHsDoc (GhcPass p))
    doc) =
          [SDoc] -> SDoc
    forall doc. IsLine doc => [doc] -> doc
    sep ([SDoc] -> SDoc) -> [SDoc] -> SDoc
    forall a b. (a -> b) -> a -> b
    $ [Maybe SDoc] -> [SDoc]
    forall a. [Maybe a] -> [a]
    catMaybes [ WarningTxt (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (WarningTxt (GhcPass p) -> SDoc)
    -> Maybe (WarningTxt (GhcPass p)) -> Maybe SDoc
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    forall (p :: Pass).
    IsPass p =>
    IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    ieDeprecation IE (GhcPass p)
    ie
                          , SDoc -> Maybe SDoc
    forall a. a -> Maybe a
    Just (SDoc -> Maybe SDoc) -> SDoc -> Maybe SDoc
    forall a b. (a -> b) -> a -> b
    $ IEWrappedName (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> IEWrappedName (GhcPass p)
    forall l e. GenLocated l e -> e
    unLoc LIEWrappedName (GhcPass p)
    GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    thing)
                          , LHsDoc (GhcPass p) -> SDoc
    forall pass. LHsDoc pass -> SDoc
    exportDocstring (LHsDoc (GhcPass p) -> SDoc)
    -> Maybe (LHsDoc (GhcPass p)) -> Maybe SDoc
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> Maybe (LHsDoc (GhcPass p))
    doc
                          ]
        ppr ie :: IE (GhcPass p)
    ie@(IEThingAll  XIEThingAll (GhcPass p)
    _   LIEWrappedName (GhcPass p)
    thing Maybe (LHsDoc (GhcPass p))
    doc) =
          [SDoc] -> SDoc
    forall doc. IsLine doc => [doc] -> doc
    sep ([SDoc] -> SDoc) -> [SDoc] -> SDoc
    forall a b. (a -> b) -> a -> b
    $ [Maybe SDoc] -> [SDoc]
    forall a. [Maybe a] -> [a]
    catMaybes [ WarningTxt (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (WarningTxt (GhcPass p) -> SDoc)
    -> Maybe (WarningTxt (GhcPass p)) -> Maybe SDoc
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    forall (p :: Pass).
    IsPass p =>
    IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    ieDeprecation IE (GhcPass p)
    ie
                          , SDoc -> Maybe SDoc
    forall a. a -> Maybe a
    Just (SDoc -> Maybe SDoc) -> SDoc -> Maybe SDoc
    forall a b. (a -> b) -> a -> b
    $ [SDoc] -> SDoc
    forall doc. IsLine doc => [doc] -> doc
    hcat [IEWrappedName (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> IEWrappedName (GhcPass p)
    forall l e. GenLocated l e -> e
    unLoc LIEWrappedName (GhcPass p)
    GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    thing)
                          , String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "(..)"]
                          , LHsDoc (GhcPass p) -> SDoc
    forall pass. LHsDoc pass -> SDoc
    exportDocstring (LHsDoc (GhcPass p) -> SDoc)
    -> Maybe (LHsDoc (GhcPass p)) -> Maybe SDoc
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> Maybe (LHsDoc (GhcPass p))
    doc
                          ]
        ppr ie :: IE (GhcPass p)
    ie@(IEThingWith XIEThingWith (GhcPass p)
    _ LIEWrappedName (GhcPass p)
    thing IEWildcard
    wc [LIEWrappedName (GhcPass p)]
    withs Maybe (LHsDoc (GhcPass p))
    doc) =
          [SDoc] -> SDoc
    forall doc. IsLine doc => [doc] -> doc
    sep ([SDoc] -> SDoc) -> [SDoc] -> SDoc
    forall a b. (a -> b) -> a -> b
    $ [Maybe SDoc] -> [SDoc]
    forall a. [Maybe a] -> [a]
    catMaybes [ WarningTxt (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (WarningTxt (GhcPass p) -> SDoc)
    -> Maybe (WarningTxt (GhcPass p)) -> Maybe SDoc
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    forall (p :: Pass).
    IsPass p =>
    IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    ieDeprecation IE (GhcPass p)
    ie
                          , SDoc -> Maybe SDoc
    forall a. a -> Maybe a
    Just (SDoc -> Maybe SDoc) -> SDoc -> Maybe SDoc
    forall a b. (a -> b) -> a -> b
    $ IEWrappedName (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> IEWrappedName (GhcPass p)
    forall l e. GenLocated l e -> e
    unLoc LIEWrappedName (GhcPass p)
    GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    thing) SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc
    parens ([SDoc] -> SDoc
    forall doc. IsLine doc => [doc] -> doc
    fsep (SDoc -> [SDoc] -> [SDoc]
    forall doc. IsLine doc => doc -> [doc] -> [doc]
    punctuate SDoc
    forall doc. IsLine doc => doc
    comma [SDoc]
    ppWiths))
                          , LHsDoc (GhcPass p) -> SDoc
    forall pass. LHsDoc pass -> SDoc
    exportDocstring (LHsDoc (GhcPass p) -> SDoc)
    -> Maybe (LHsDoc (GhcPass p)) -> Maybe SDoc
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> Maybe (LHsDoc (GhcPass p))
    doc
                          ]
          where
            ppWiths :: [SDoc]
    ppWiths =
              case IEWildcard
    wc of
                  IEWildcard
    NoIEWildcard ->
                    (GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p)) -> SDoc)
    -> [GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))] -> [SDoc]
    forall a b. (a -> b) -> [a] -> [b]
    map (IEWrappedName (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (IEWrappedName (GhcPass p) -> SDoc)
    -> (GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
        -> IEWrappedName (GhcPass p))
    -> GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> SDoc
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> IEWrappedName (GhcPass p)
    forall l e. GenLocated l e -> e
    unLoc) [LIEWrappedName (GhcPass p)]
    [GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))]
    withs
                  IEWildcard Int
    pos ->
                    let ([SDoc]
    bs, [SDoc]
    as) = Int -> [SDoc] -> ([SDoc], [SDoc])
    forall a. Int -> [a] -> ([a], [a])
    splitAt Int
    pos ((GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p)) -> SDoc)
    -> [GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))] -> [SDoc]
    forall a b. (a -> b) -> [a] -> [b]
    map (IEWrappedName (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (IEWrappedName (GhcPass p) -> SDoc)
    -> (GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
        -> IEWrappedName (GhcPass p))
    -> GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> SDoc
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))
    -> IEWrappedName (GhcPass p)
    forall l e. GenLocated l e -> e
    unLoc) [LIEWrappedName (GhcPass p)]
    [GenLocated SrcSpanAnnA (IEWrappedName (GhcPass p))]
    withs)
                    in [SDoc]
    bs [SDoc] -> [SDoc] -> [SDoc]
    forall a. [a] -> [a] -> [a]
    ++ [String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    ".."] [SDoc] -> [SDoc] -> [SDoc]
    forall a. [a] -> [a] -> [a]
    ++ [SDoc]
    as
        ppr ie :: IE (GhcPass p)
    ie@(IEModuleContents XIEModuleContents (GhcPass p)
    _ XRec (GhcPass p) ModuleName
    mod')
            = [SDoc] -> SDoc
    forall doc. IsLine doc => [doc] -> doc
    sep ([SDoc] -> SDoc) -> [SDoc] -> SDoc
    forall a b. (a -> b) -> a -> b
    $ [Maybe SDoc] -> [SDoc]
    forall a. [Maybe a] -> [a]
    catMaybes [WarningTxt (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr (WarningTxt (GhcPass p) -> SDoc)
    -> Maybe (WarningTxt (GhcPass p)) -> Maybe SDoc
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    forall (p :: Pass).
    IsPass p =>
    IE (GhcPass p) -> Maybe (WarningTxt (GhcPass p))
    ieDeprecation IE (GhcPass p)
    ie, SDoc -> Maybe SDoc
    forall a. a -> Maybe a
    Just (SDoc -> Maybe SDoc) -> SDoc -> Maybe SDoc
    forall a b. (a -> b) -> a -> b
    $ String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "module" SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> GenLocated SrcSpanAnnA ModuleName -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr XRec (GhcPass p) ModuleName
    GenLocated SrcSpanAnnA ModuleName
    mod']
        ppr (IEGroup XIEGroup (GhcPass p)
    _ Int
    n LHsDoc (GhcPass p)
    _)           = String -> SDoc
    forall doc. IsLine doc => String -> doc
    text (String
    "<IEGroup: " String -> String -> String
    forall a. [a] -> [a] -> [a]
    ++ Int -> String
    forall a. Show a => a -> String
    show Int
    n String -> String -> String
    forall a. [a] -> [a] -> [a]
    ++ String
    ">")
        ppr (IEDoc XIEDoc (GhcPass p)
    _ LHsDoc (GhcPass p)
    doc)             = LHsDoc (GhcPass p) -> SDoc
    forall a. Outputable a => a -> SDoc
    ppr LHsDoc (GhcPass p)
    doc
        ppr (IEDocNamed XIEDocNamed (GhcPass p)
    _ String
    string)     = String -> SDoc
    forall doc. IsLine doc => String -> doc
    text (String
    "<IEDocNamed: " String -> String -> String
    forall a. [a] -> [a] -> [a]
    ++ String
    string String -> String -> String
    forall a. [a] -> [a] -> [a]
    ++ String
    ">")

    instance (HasOccName (IdP (GhcPass p)), OutputableBndrId p) => HasOccName (IEWrappedName (GhcPass p)) where
      occName :: IEWrappedName (GhcPass p) -> OccName
    occName IEWrappedName (GhcPass p)
    w = IdGhcP p -> OccName
    forall name. HasOccName name => name -> OccName
    occName (IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    w)

    instance OutputableBndrId p => OutputableBndr (IEWrappedName (GhcPass p)) where
      pprBndr :: BindingSite -> IEWrappedName (GhcPass p) -> SDoc
    pprBndr BindingSite
    bs   IEWrappedName (GhcPass p)
    w = BindingSite -> IdGhcP p -> SDoc
    forall a. OutputableBndr a => BindingSite -> a -> SDoc
    pprBndr BindingSite
    bs   (IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    w)
      pprPrefixOcc :: IEWrappedName (GhcPass p) -> SDoc
    pprPrefixOcc IEWrappedName (GhcPass p)
    w = IdGhcP p -> SDoc
    forall a. OutputableBndr a => a -> SDoc
    pprPrefixOcc (IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    w)
      pprInfixOcc :: IEWrappedName (GhcPass p) -> SDoc
    pprInfixOcc  IEWrappedName (GhcPass p)
    w = IdGhcP p -> SDoc
    forall a. OutputableBndr a => a -> SDoc
    pprInfixOcc  (IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    forall (p :: Pass). IEWrappedName (GhcPass p) -> IdP (GhcPass p)
    ieWrappedName IEWrappedName (GhcPass p)
    w)

    instance OutputableBndrId p => Outputable (IEWrappedName (GhcPass p)) where
      ppr :: IEWrappedName (GhcPass p) -> SDoc
    ppr (IEDefault XIEDefault (GhcPass p)
    _ (L Anno (IdGhcP p)
    _ IdGhcP p
    n)) = String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "default" SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> IdGhcP p -> SDoc
    forall a. OutputableBndr a => a -> SDoc
    pprPrefixOcc IdGhcP p
    n
      ppr (IEName    XIEName (GhcPass p)
    _ (L Anno (IdGhcP p)
    _ IdGhcP p
    n)) = IdGhcP p -> SDoc
    forall a. OutputableBndr a => a -> SDoc
    pprPrefixOcc IdGhcP p
    n
      ppr (IEPattern XIEPattern (GhcPass p)
    _ (L Anno (IdGhcP p)
    _ IdGhcP p
    n)) = String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "pattern" SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> IdGhcP p -> SDoc
    forall a. OutputableBndr a => a -> SDoc
    pprPrefixOcc IdGhcP p
    n
      ppr (IEType    XIEType (GhcPass p)
    _ (L Anno (IdGhcP p)
    _ IdGhcP p
    n)) = String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "type"    SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> IdGhcP p -> SDoc
    forall a. OutputableBndr a => a -> SDoc
    pprPrefixOcc IdGhcP p
    n

    pprImpExp :: (HasOccName name, OutputableBndr name) => name -> SDoc
    pprImpExp :: forall name. (HasOccName name, OutputableBndr name) => name -> SDoc
    pprImpExp name
    name = SDoc
    type_pref SDoc -> SDoc -> SDoc
    forall doc. IsLine doc => doc -> doc -> doc
    <+> name -> SDoc
    forall a. OutputableBndr a => a -> SDoc
    pprPrefixOcc name
    name
        where
        occ :: OccName
    occ = name -> OccName
    forall name. HasOccName name => name -> OccName
    occName name
    name
        type_pref :: SDoc
    type_pref | OccName -> Bool
    isTcOcc OccName
    occ Bool -> Bool -> Bool
    && OccName -> Bool
    isSymOcc OccName
    occ = String -> SDoc
    forall doc. IsLine doc => String -> doc
    text String
    "type"
                  | Bool
    otherwise                   = SDoc
    forall doc. IsOutput doc => doc
    empty