{-# LANGUAGE CPP #-}
module GHC.SourceGen.Module
(
HsModule'
, module'
, ImportDecl'
, qualified'
, as'
, import'
, exposing
, hiding
, source
, IE'
, thingAll
, thingWith
, moduleContents
) where
import GHC.Hs.ImpExp
( IEWildcard(..), IEWrappedName(..), IE(..)
#if MIN_VERSION_ghc(9,6,0)
, ImportListInterpretation (EverythingBut, Exactly), XImportDeclPass (ideclSourceText, ideclImplicit)
#else
, LIEWrappedName
#endif
)
import GHC.Hs
( HsModule(..)
, ImportDecl(..)
#if MIN_VERSION_ghc(8,10,0)
, ImportDeclQualifiedStyle(..)
#endif
#if MIN_VERSION_ghc(9,2,0)
, EpAnn(..)
#endif
#if MIN_VERSION_ghc(9,6,0)
, hsmodDeprecMessage, hsmodHaddockModHeader, hsmodAnn, AnnKeywordId, XModulePs (XModulePs, hsmodLayout), noAnn, LayoutInfo (NoLayoutInfo), GhcPs, XImportDeclPass (XImportDeclPass, ideclAnn), SrcSpanAnnA, noExtField
#endif
)
#if MIN_VERSION_ghc(9,0,0) && !MIN_VERSION_ghc(9,6,0)
import GHC.Types.SrcLoc (LayoutInfo(..))
#endif
#if MIN_VERSION_ghc(9,0,0)
import GHC.Unit.Module (IsBootInterface(..))
import GHC.Types.Name.Reader (RdrName)
#else
import RdrName (RdrName)
#endif
#if MIN_VERSION_ghc(9,4,0)
import GHC.Types.PkgQual (RawPkgQual(..))
#endif
import GHC.SourceGen.Syntax.Internal
import GHC.SourceGen.Name.Internal
import GHC.SourceGen.Lit.Internal (noSourceText)
import GHC.SourceGen.Name (unqual)
#if MIN_VERSION_ghc(9,4,0)
import GHC.SourceGen.Name (RdrNameStr, ModuleNameStr(unModuleNameStr), OccNameStr)
import GHC.Types.SourceText (SourceText(NoSourceText))
import GHC.Types.SrcLoc (GenLocated)
#endif
module'
:: Maybe ModuleNameStr
-> Maybe [IE']
-> [ImportDecl']
-> [HsDecl']
-> HsModule'
module' :: Maybe ModuleNameStr
-> Maybe [IE'] -> [ImportDecl'] -> [HsDecl'] -> HsModule'
module' Maybe ModuleNameStr
name Maybe [IE']
exports [ImportDecl']
imports [HsDecl']
decls = HsModule
{ hsmodName :: Maybe (XRec GhcPs ModuleName)
hsmodName = (ModuleNameStr -> GenLocated (SrcSpanAnn AnnListItem) ModuleName)
-> Maybe ModuleNameStr
-> Maybe (GenLocated (SrcSpanAnn AnnListItem) ModuleName)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (ModuleName -> GenLocated (SrcSpanAnn AnnListItem) ModuleName
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated (ModuleName -> GenLocated (SrcSpanAnn AnnListItem) ModuleName)
-> (ModuleNameStr -> ModuleName)
-> ModuleNameStr
-> GenLocated (SrcSpanAnn AnnListItem) ModuleName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ModuleNameStr -> ModuleName
unModuleNameStr) Maybe ModuleNameStr
name
, hsmodExports :: Maybe (XRec GhcPs [LIE GhcPs])
hsmodExports = ([IE']
-> GenLocated
(SrcSpanAnn AnnList) [GenLocated (SrcSpanAnn AnnListItem) IE'])
-> Maybe [IE']
-> Maybe
(GenLocated
(SrcSpanAnn AnnList) [GenLocated (SrcSpanAnn AnnListItem) IE'])
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([GenLocated (SrcSpanAnn AnnListItem) IE']
-> GenLocated
(SrcSpanAnn AnnList) [GenLocated (SrcSpanAnn AnnListItem) IE']
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated ([GenLocated (SrcSpanAnn AnnListItem) IE']
-> GenLocated
(SrcSpanAnn AnnList) [GenLocated (SrcSpanAnn AnnListItem) IE'])
-> ([IE'] -> [GenLocated (SrcSpanAnn AnnListItem) IE'])
-> [IE']
-> GenLocated
(SrcSpanAnn AnnList) [GenLocated (SrcSpanAnn AnnListItem) IE']
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (IE' -> GenLocated (SrcSpanAnn AnnListItem) IE')
-> [IE'] -> [GenLocated (SrcSpanAnn AnnListItem) IE']
forall a b. (a -> b) -> [a] -> [b]
map IE' -> GenLocated (SrcSpanAnn AnnListItem) IE'
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated) Maybe [IE']
exports
, hsmodImports :: [LImportDecl GhcPs]
hsmodImports = (ImportDecl' -> GenLocated (SrcSpanAnn AnnListItem) ImportDecl')
-> [ImportDecl']
-> [GenLocated (SrcSpanAnn AnnListItem) ImportDecl']
forall a b. (a -> b) -> [a] -> [b]
map ImportDecl' -> GenLocated (SrcSpanAnn AnnListItem) ImportDecl'
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated [ImportDecl']
imports
, hsmodDecls :: [LHsDecl GhcPs]
hsmodDecls = (HsDecl' -> GenLocated (SrcSpanAnn AnnListItem) HsDecl')
-> [HsDecl'] -> [GenLocated (SrcSpanAnn AnnListItem) HsDecl']
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap HsDecl' -> GenLocated (SrcSpanAnn AnnListItem) HsDecl'
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated [HsDecl']
decls
#if MIN_VERSION_ghc(9,6,0)
, hsmodExt :: XCModule GhcPs
hsmodExt = XModulePs
{ hsmodAnn :: EpAnn AnnsModule
hsmodAnn = EpAnn AnnsModule
forall a. EpAnn a
noAnn
, hsmodLayout :: LayoutInfo GhcPs
hsmodLayout = LayoutInfo GhcPs
forall pass. LayoutInfo pass
NoLayoutInfo
, hsmodDeprecMessage :: Maybe (LocatedP (WarningTxt GhcPs))
hsmodDeprecMessage = Maybe (LocatedP (WarningTxt GhcPs))
forall a. Maybe a
Nothing
, hsmodHaddockModHeader :: Maybe (LHsDoc GhcPs)
hsmodHaddockModHeader = Maybe (LHsDoc GhcPs)
forall a. Maybe a
Nothing }
#else
, hsmodDeprecMessage = Nothing
, hsmodHaddockModHeader = Nothing
# if MIN_VERSION_ghc(9,0,0)
, hsmodLayout = NoLayoutInfo
# endif
# if MIN_VERSION_ghc(9,2,0)
, hsmodAnn = EpAnnNotUsed
# endif
#endif
}
qualified' :: ImportDecl' -> ImportDecl'
qualified' :: ImportDecl' -> ImportDecl'
qualified' ImportDecl'
d = ImportDecl'
d { ideclQualified =
#if MIN_VERSION_ghc(8,10,0)
QualifiedPre
#else
True
#endif
}
as' :: ImportDecl' -> ModuleNameStr -> ImportDecl'
as' :: ImportDecl' -> ModuleNameStr -> ImportDecl'
as' ImportDecl'
d ModuleNameStr
m = ImportDecl'
d { ideclAs = Just (mkLocated $ unModuleNameStr m) }
import' :: ModuleNameStr -> ImportDecl'
import' :: ModuleNameStr -> ImportDecl'
import' ModuleNameStr
m = XRec GhcPs ModuleName
-> ImportDeclPkgQual GhcPs
-> IsBootInterface
-> Bool
-> ImportDeclQualifiedStyle
-> Maybe (XRec GhcPs ModuleName)
-> Maybe (ImportListInterpretation, XRec GhcPs [LIE GhcPs])
-> ImportDecl'
importDecl
(ModuleName -> GenLocated (SrcSpanAnn AnnListItem) ModuleName
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated (ModuleName -> GenLocated (SrcSpanAnn AnnListItem) ModuleName)
-> ModuleName -> GenLocated (SrcSpanAnn AnnListItem) ModuleName
forall a b. (a -> b) -> a -> b
$ ModuleNameStr -> ModuleName
unModuleNameStr ModuleNameStr
m)
#if MIN_VERSION_ghc(9,4,0)
ImportDeclPkgQual GhcPs
RawPkgQual
NoRawPkgQual
#else
Nothing
#endif
#if MIN_VERSION_ghc(9,0,0)
IsBootInterface
NotBoot
#else
False
#endif
Bool
False
#if MIN_VERSION_ghc(8,10,0)
ImportDeclQualifiedStyle
NotQualified
#else
False
#endif
#if !MIN_VERSION_ghc(9,6,0)
False
#endif
Maybe (XRec GhcPs ModuleName)
Maybe (GenLocated (SrcSpanAnn AnnListItem) ModuleName)
forall a. Maybe a
Nothing Maybe (ImportListInterpretation, XRec GhcPs [LIE GhcPs])
Maybe
(ImportListInterpretation,
GenLocated
(SrcSpanAnn AnnList) [GenLocated (SrcSpanAnn AnnListItem) IE'])
forall a. Maybe a
Nothing
where
#if MIN_VERSION_ghc(9,6,0)
importDecl :: XRec GhcPs ModuleName
-> ImportDeclPkgQual GhcPs
-> IsBootInterface
-> Bool
-> ImportDeclQualifiedStyle
-> Maybe (XRec GhcPs ModuleName)
-> Maybe (ImportListInterpretation, XRec GhcPs [LIE GhcPs])
-> ImportDecl'
importDecl = XCImportDecl GhcPs
-> XRec GhcPs ModuleName
-> ImportDeclPkgQual GhcPs
-> IsBootInterface
-> Bool
-> ImportDeclQualifiedStyle
-> Maybe (XRec GhcPs ModuleName)
-> Maybe (ImportListInterpretation, XRec GhcPs [LIE GhcPs])
-> ImportDecl'
forall pass.
XCImportDecl pass
-> XRec pass ModuleName
-> ImportDeclPkgQual pass
-> IsBootInterface
-> Bool
-> ImportDeclQualifiedStyle
-> Maybe (XRec pass ModuleName)
-> Maybe (ImportListInterpretation, XRec pass [LIE pass])
-> ImportDecl pass
ImportDecl
(XImportDeclPass{ ideclAnn :: EpAnn EpAnnImportDecl
ideclAnn = EpAnn EpAnnImportDecl
forall a. EpAnn a
EpAnnNotUsed
, ideclSourceText :: SourceText
ideclSourceText = SourceText
NoSourceText
, ideclImplicit :: Bool
ideclImplicit = Bool
False
})
#else
importDecl = noSourceText (withEpAnnNotUsed ImportDecl)
#endif
exposing :: ImportDecl' -> [IE'] -> ImportDecl'
exposing :: ImportDecl' -> [IE'] -> ImportDecl'
exposing ImportDecl'
d [IE']
ies = ImportDecl'
d
#if MIN_VERSION_ghc(9,6,0)
{ ideclImportList = Just (Exactly, mkLocated $ map mkLocated ies) }
#else
{ ideclHiding = Just (False, mkLocated $ map mkLocated ies) }
#endif
hiding :: ImportDecl' -> [IE'] -> ImportDecl'
hiding :: ImportDecl' -> [IE'] -> ImportDecl'
hiding ImportDecl'
d [IE']
ies = ImportDecl'
d
#if MIN_VERSION_ghc(9,6,0)
{ ideclImportList = Just (EverythingBut, mkLocated $ map mkLocated ies) }
#else
{ ideclHiding = Just (True, mkLocated $ map mkLocated ies) }
#endif
source :: ImportDecl' -> ImportDecl'
source :: ImportDecl' -> ImportDecl'
source ImportDecl'
d = ImportDecl'
d { ideclSource =
#if MIN_VERSION_ghc(9,0,0)
IsBoot
#else
True
#endif
}
thingAll :: RdrNameStr -> IE'
thingAll :: RdrNameStr -> IE'
thingAll = (EpAnn [AddEpAnn]
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
-> IE')
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs) -> IE'
forall ann a. (EpAnn ann -> a) -> a
withEpAnnNotUsed XIEThingAll GhcPs -> LIEWrappedName GhcPs -> IE'
EpAnn [AddEpAnn]
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs) -> IE'
forall pass. XIEThingAll pass -> LIEWrappedName pass -> IE pass
IEThingAll (GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs) -> IE')
-> (RdrNameStr
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs))
-> RdrNameStr
-> IE'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RdrNameStr
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
wrappedName
thingWith :: RdrNameStr -> [OccNameStr] -> IE'
thingWith :: RdrNameStr -> [OccNameStr] -> IE'
thingWith RdrNameStr
n [OccNameStr]
cs = (EpAnn [AddEpAnn]
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
-> IEWildcard
-> [GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)]
-> IE')
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
-> IEWildcard
-> [GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)]
-> IE'
forall ann a. (EpAnn ann -> a) -> a
withEpAnnNotUsed XIEThingWith GhcPs
-> LIEWrappedName GhcPs
-> IEWildcard
-> [LIEWrappedName GhcPs]
-> IE'
EpAnn [AddEpAnn]
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
-> IEWildcard
-> [GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)]
-> IE'
forall pass.
XIEThingWith pass
-> LIEWrappedName pass
-> IEWildcard
-> [LIEWrappedName pass]
-> IE pass
IEThingWith (RdrNameStr
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
wrappedName RdrNameStr
n) IEWildcard
NoIEWildcard
((OccNameStr
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs))
-> [OccNameStr]
-> [GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)]
forall a b. (a -> b) -> [a] -> [b]
map (RdrNameStr
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
wrappedName (RdrNameStr
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs))
-> (OccNameStr -> RdrNameStr)
-> OccNameStr
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OccNameStr -> RdrNameStr
unqual) [OccNameStr]
cs)
#if !MIN_VERSION_ghc(9,2,0)
[]
#endif
#if MIN_VERSION_ghc(9,6,0)
wrappedName :: RdrNameStr -> GenLocated SrcSpanAnnA (IEWrappedName GhcPs)
wrappedName :: RdrNameStr
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
wrappedName RdrNameStr
rNameStr = IEWrappedName GhcPs
-> GenLocated (SrcSpanAnn AnnListItem) (IEWrappedName GhcPs)
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated (XIEName GhcPs -> XRec GhcPs (IdP GhcPs) -> IEWrappedName GhcPs
forall p. XIEName p -> LIdP p -> IEWrappedName p
IEName XIEName GhcPs
NoExtField
noExtField (XRec GhcPs (IdP GhcPs) -> IEWrappedName GhcPs)
-> XRec GhcPs (IdP GhcPs) -> IEWrappedName GhcPs
forall a b. (a -> b) -> a -> b
$ RdrNameStr -> LocatedN RdrName
exportRdrName RdrNameStr
rNameStr)
#else
wrappedName :: RdrNameStr -> LIEWrappedName RdrName
wrappedName = mkLocated . IEName . exportRdrName
#endif
moduleContents :: ModuleNameStr -> IE'
moduleContents :: ModuleNameStr -> IE'
moduleContents = (EpAnn [AddEpAnn]
-> GenLocated (SrcSpanAnn AnnListItem) ModuleName -> IE')
-> GenLocated (SrcSpanAnn AnnListItem) ModuleName -> IE'
forall ann a. (EpAnn ann -> a) -> a
withEpAnnNotUsed XIEModuleContents GhcPs -> XRec GhcPs ModuleName -> IE'
EpAnn [AddEpAnn]
-> GenLocated (SrcSpanAnn AnnListItem) ModuleName -> IE'
forall pass.
XIEModuleContents pass -> XRec pass ModuleName -> IE pass
IEModuleContents (GenLocated (SrcSpanAnn AnnListItem) ModuleName -> IE')
-> (ModuleNameStr
-> GenLocated (SrcSpanAnn AnnListItem) ModuleName)
-> ModuleNameStr
-> IE'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ModuleName -> GenLocated (SrcSpanAnn AnnListItem) ModuleName
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated (ModuleName -> GenLocated (SrcSpanAnn AnnListItem) ModuleName)
-> (ModuleNameStr -> ModuleName)
-> ModuleNameStr
-> GenLocated (SrcSpanAnn AnnListItem) ModuleName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ModuleNameStr -> ModuleName
unModuleNameStr