{-# OPTIONS_GHC -O0 #-}
{-# OPTIONS_GHC -Wno-orphans #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
module GHC.Hs (
module Language.Haskell.Syntax,
module GHC.Hs.Binds,
module GHC.Hs.Decls,
module GHC.Hs.Expr,
module GHC.Hs.ImpExp,
module GHC.Hs.Lit,
module GHC.Hs.Pat,
module GHC.Hs.Type,
module GHC.Hs.Utils,
module GHC.Hs.Doc,
module GHC.Hs.Extension,
module GHC.Parser.Annotation,
Fixity,
HsModule(..), AnnsModule(..),
HsParsedModule(..), XModulePs(..)
) where
import GHC.Prelude
import GHC.Hs.Decls
import GHC.Hs.Binds
import GHC.Hs.Expr
import GHC.Hs.ImpExp
import GHC.Hs.Lit
import Language.Haskell.Syntax
import GHC.Hs.Extension
import GHC.Parser.Annotation
import GHC.Hs.Pat
import GHC.Hs.Type
import GHC.Hs.Utils
import GHC.Hs.Doc
import GHC.Hs.Instances ()
import GHC.Utils.Outputable
import GHC.Types.Fixity ( Fixity )
import GHC.Types.SrcLoc
import GHC.Unit.Module.Warnings ( WarningTxt )
import Data.Data hiding ( Fixity )
data XModulePs
= XModulePs {
XModulePs -> EpAnn AnnsModule
hsmodAnn :: EpAnn AnnsModule,
XModulePs -> LayoutInfo GhcPs
hsmodLayout :: LayoutInfo GhcPs,
XModulePs -> Maybe (LocatedP (WarningTxt GhcPs))
hsmodDeprecMessage :: Maybe (LocatedP (WarningTxt GhcPs)),
:: Maybe (LHsDoc GhcPs)
}
deriving Typeable XModulePs
XModulePs -> DataType
XModulePs -> Constr
(forall b. Data b => b -> b) -> XModulePs -> XModulePs
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) -> XModulePs -> u
forall u. (forall d. Data d => d -> u) -> XModulePs -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> XModulePs -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> XModulePs -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> XModulePs -> m XModulePs
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> XModulePs -> m XModulePs
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c XModulePs
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> XModulePs -> c XModulePs
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c XModulePs)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c XModulePs)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> XModulePs -> m XModulePs
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> XModulePs -> m XModulePs
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> XModulePs -> m XModulePs
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> XModulePs -> m XModulePs
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> XModulePs -> m XModulePs
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> XModulePs -> m XModulePs
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> XModulePs -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> XModulePs -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> XModulePs -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> XModulePs -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> XModulePs -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> XModulePs -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> XModulePs -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> XModulePs -> r
gmapT :: (forall b. Data b => b -> b) -> XModulePs -> XModulePs
$cgmapT :: (forall b. Data b => b -> b) -> XModulePs -> XModulePs
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c XModulePs)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c XModulePs)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c XModulePs)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c XModulePs)
dataTypeOf :: XModulePs -> DataType
$cdataTypeOf :: XModulePs -> DataType
toConstr :: XModulePs -> Constr
$ctoConstr :: XModulePs -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c XModulePs
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c XModulePs
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> XModulePs -> c XModulePs
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> XModulePs -> c XModulePs
Data
type instance XCModule GhcPs = XModulePs
type instance XCModule GhcRn = DataConCantHappen
type instance XCModule GhcTc = DataConCantHappen
type instance XXModule p = DataConCantHappen
type instance Anno ModuleName = SrcSpanAnnA
deriving instance Data (HsModule GhcPs)
data AnnsModule
= AnnsModule {
AnnsModule -> [AddEpAnn]
am_main :: [AddEpAnn],
AnnsModule -> AnnList
am_decls :: AnnList
} deriving (Typeable AnnsModule
AnnsModule -> DataType
AnnsModule -> Constr
(forall b. Data b => b -> b) -> AnnsModule -> AnnsModule
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) -> AnnsModule -> u
forall u. (forall d. Data d => d -> u) -> AnnsModule -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AnnsModule -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AnnsModule -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AnnsModule -> m AnnsModule
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AnnsModule -> m AnnsModule
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AnnsModule
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AnnsModule -> c AnnsModule
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AnnsModule)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AnnsModule)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AnnsModule -> m AnnsModule
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AnnsModule -> m AnnsModule
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AnnsModule -> m AnnsModule
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AnnsModule -> m AnnsModule
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AnnsModule -> m AnnsModule
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AnnsModule -> m AnnsModule
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> AnnsModule -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> AnnsModule -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> AnnsModule -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> AnnsModule -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AnnsModule -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AnnsModule -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AnnsModule -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AnnsModule -> r
gmapT :: (forall b. Data b => b -> b) -> AnnsModule -> AnnsModule
$cgmapT :: (forall b. Data b => b -> b) -> AnnsModule -> AnnsModule
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AnnsModule)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AnnsModule)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AnnsModule)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AnnsModule)
dataTypeOf :: AnnsModule -> DataType
$cdataTypeOf :: AnnsModule -> DataType
toConstr :: AnnsModule -> Constr
$ctoConstr :: AnnsModule -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AnnsModule
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AnnsModule
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AnnsModule -> c AnnsModule
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AnnsModule -> c AnnsModule
Data, AnnsModule -> AnnsModule -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AnnsModule -> AnnsModule -> Bool
$c/= :: AnnsModule -> AnnsModule -> Bool
== :: AnnsModule -> AnnsModule -> Bool
$c== :: AnnsModule -> AnnsModule -> Bool
Eq)
instance Outputable (HsModule GhcPs) where
ppr :: HsModule GhcPs -> SDoc
ppr (HsModule { hsmodExt :: forall p. HsModule p -> XCModule p
hsmodExt = XModulePs { hsmodHaddockModHeader :: XModulePs -> Maybe (LHsDoc GhcPs)
hsmodHaddockModHeader = Maybe (LHsDoc GhcPs)
mbDoc }
, hsmodName :: forall p. HsModule p -> Maybe (XRec p ModuleName)
hsmodName = Maybe (XRec GhcPs ModuleName)
Nothing
, hsmodImports :: forall p. HsModule p -> [LImportDecl p]
hsmodImports = [LImportDecl GhcPs]
imports
, hsmodDecls :: forall p. HsModule p -> [LHsDecl p]
hsmodDecls = [LHsDecl GhcPs]
decls })
= forall name. Maybe (LHsDoc name) -> SDoc -> SDoc
pprMaybeWithDoc Maybe (LHsDoc GhcPs)
mbDoc forall a b. (a -> b) -> a -> b
$ forall t. Outputable t => [t] -> SDoc
pp_nonnull [LImportDecl GhcPs]
imports
forall doc. IsDoc doc => doc -> doc -> doc
$$ forall t. Outputable t => [t] -> SDoc
pp_nonnull [LHsDecl GhcPs]
decls
ppr (HsModule { hsmodExt :: forall p. HsModule p -> XCModule p
hsmodExt = XModulePs { hsmodDeprecMessage :: XModulePs -> Maybe (LocatedP (WarningTxt GhcPs))
hsmodDeprecMessage = Maybe (LocatedP (WarningTxt GhcPs))
deprec
, hsmodHaddockModHeader :: XModulePs -> Maybe (LHsDoc GhcPs)
hsmodHaddockModHeader = Maybe (LHsDoc GhcPs)
mbDoc }
, hsmodName :: forall p. HsModule p -> Maybe (XRec p ModuleName)
hsmodName = (Just XRec GhcPs ModuleName
name)
, hsmodExports :: forall p. HsModule p -> Maybe (XRec p [LIE p])
hsmodExports = Maybe (XRec GhcPs [LIE GhcPs])
exports
, hsmodImports :: forall p. HsModule p -> [LImportDecl p]
hsmodImports = [LImportDecl GhcPs]
imports
, hsmodDecls :: forall p. HsModule p -> [LHsDecl p]
hsmodDecls = [LHsDecl GhcPs]
decls })
= forall name. Maybe (LHsDoc name) -> SDoc -> SDoc
pprMaybeWithDoc Maybe (LHsDoc GhcPs)
mbDoc forall a b. (a -> b) -> a -> b
$
forall doc. IsDoc doc => [doc] -> doc
vcat
[ case Maybe (XRec GhcPs [LIE GhcPs])
exports of
Maybe (XRec GhcPs [LIE GhcPs])
Nothing -> SDoc -> SDoc
pp_header (forall doc. IsLine doc => String -> doc
text String
"where")
Just XRec GhcPs [LIE GhcPs]
es -> forall doc. IsDoc doc => [doc] -> doc
vcat [
SDoc -> SDoc
pp_header forall doc. IsLine doc => doc
lparen,
Int -> SDoc -> SDoc
nest Int
8 (forall a. (a -> SDoc) -> [a] -> SDoc
pprWithCommas forall a. Outputable a => a -> SDoc
ppr (forall l e. GenLocated l e -> e
unLoc XRec GhcPs [LIE GhcPs]
es)),
Int -> SDoc -> SDoc
nest Int
4 (forall doc. IsLine doc => String -> doc
text String
") where")
],
forall t. Outputable t => [t] -> SDoc
pp_nonnull [LImportDecl GhcPs]
imports,
forall t. Outputable t => [t] -> SDoc
pp_nonnull [LHsDecl GhcPs]
decls
]
where
pp_header :: SDoc -> SDoc
pp_header SDoc
rest = case Maybe (LocatedP (WarningTxt GhcPs))
deprec of
Maybe (LocatedP (WarningTxt GhcPs))
Nothing -> SDoc
pp_modname forall doc. IsLine doc => doc -> doc -> doc
<+> SDoc
rest
Just LocatedP (WarningTxt GhcPs)
d -> forall doc. IsDoc doc => [doc] -> doc
vcat [ SDoc
pp_modname, forall a. Outputable a => a -> SDoc
ppr LocatedP (WarningTxt GhcPs)
d, SDoc
rest ]
pp_modname :: SDoc
pp_modname = forall doc. IsLine doc => String -> doc
text String
"module" forall doc. IsLine doc => doc -> doc -> doc
<+> forall a. Outputable a => a -> SDoc
ppr XRec GhcPs ModuleName
name
pp_nonnull :: Outputable t => [t] -> SDoc
pp_nonnull :: forall t. Outputable t => [t] -> SDoc
pp_nonnull [] = forall doc. IsOutput doc => doc
empty
pp_nonnull [t]
xs = forall doc. IsDoc doc => [doc] -> doc
vcat (forall a b. (a -> b) -> [a] -> [b]
map forall a. Outputable a => a -> SDoc
ppr [t]
xs)
data HsParsedModule = HsParsedModule {
HsParsedModule -> Located (HsModule GhcPs)
hpm_module :: Located (HsModule GhcPs),
HsParsedModule -> [String]
hpm_src_files :: [FilePath]
}