module Language.Haskell.Tools.AST.Modules where
import Language.Haskell.Tools.AST.Ann
import Language.Haskell.Tools.AST.Base
import Language.Haskell.Tools.AST.Exprs
import Language.Haskell.Tools.AST.Binds
import Language.Haskell.Tools.AST.Decls
data Module a
= Module { _filePragmas :: AnnList FilePragma a
, _modHead :: AnnMaybe ModuleHead a
, _modImports :: AnnList ImportDecl a
, _modDecl :: AnnList Decl a
}
data ModuleHead a
= ModuleHead { _mhName :: Ann SimpleName a
, _mhExports :: AnnMaybe ExportSpecList a
, _mhPragma :: AnnMaybe ModulePragma a
}
data ExportSpecList a
= ExportSpecList { _espExports :: AnnList ExportSpec a }
data ExportSpec a
= DeclExport { _exportDecl :: Ann IESpec a
}
| ModuleExport { _exportModuleName :: Ann SimpleName a
}
data IESpec a
= IESpec { _ieName :: Ann Name a
, _ieSubspec :: AnnMaybe SubSpec a
}
data SubSpec a
= SubSpecAll
| SubSpecList { _essList :: AnnList Name a }
data FilePragma a
= LanguagePragma { _lpPragmas :: AnnList LanguageExtension a
}
| OptionsPragma { _opStr :: Ann StringNode a
}
data ModulePragma a
= ModuleWarningPragma { _modWarningStr :: AnnList StringNode a
}
| ModuleDeprecatedPragma { _modDeprecatedPragma :: AnnList StringNode a
}
data LanguageExtension a = LanguageExtension { _langExt :: String }
data ImportDecl a
= ImportDecl { _importSource :: AnnMaybe ImportSource a
, _importQualified :: AnnMaybe ImportQualified a
, _importSafe :: AnnMaybe ImportSafe a
, _importPkg :: AnnMaybe StringNode a
, _importModule :: Ann SimpleName a
, _importAs :: AnnMaybe ImportRenaming a
, _importSpec :: AnnMaybe ImportSpec a
}
data ImportSpec a
= ImportSpecList { _importSpecList :: AnnList IESpec a
}
| ImportSpecHiding { _importSpecHiding :: AnnList IESpec a
}
data ImportQualified a = ImportQualified
data ImportSource a = ImportSource
data ImportSafe a = ImportSafe
data TypeNamespace a = TypeNamespace
data ImportRenaming a = ImportRenaming { _importRename :: Ann SimpleName a }