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 dom stage
= Module { _filePragmas :: AnnList FilePragma dom stage
, _modHead :: AnnMaybe ModuleHead dom stage
, _modImports :: AnnList ImportDecl dom stage
, _modDecl :: AnnList Decl dom stage
}
data ModuleHead dom stage
= ModuleHead { _mhName :: Ann ModuleName dom stage
, _mhExports :: AnnMaybe ExportSpecList dom stage
, _mhPragma :: AnnMaybe ModulePragma dom stage
}
data ExportSpecList dom stage
= ExportSpecList { _espExports :: AnnList ExportSpec dom stage }
data ExportSpec dom stage
= DeclExport { _exportDecl :: Ann IESpec dom stage
}
| ModuleExport { _exportModuleName :: Ann ModuleName dom stage
}
data IESpec dom stage
= IESpec { _ieName :: Ann Name dom stage
, _ieSubspec :: AnnMaybe SubSpec dom stage
}
data SubSpec dom stage
= SubSpecAll
| SubSpecList { _essList :: AnnList Name dom stage }
data FilePragma dom stage
= LanguagePragma { _lpPragmas :: AnnList LanguageExtension dom stage
}
| OptionsPragma { _opStr :: Ann StringNode dom stage
}
data ModulePragma dom stage
= ModuleWarningPragma { _modWarningStr :: AnnList StringNode dom stage
}
| ModuleDeprecatedPragma { _modDeprecatedPragma :: AnnList StringNode dom stage
}
data LanguageExtension dom stage = LanguageExtension { _langExt :: String }
data ImportDecl dom stage
= ImportDecl { _importSource :: AnnMaybe ImportSource dom stage
, _importQualified :: AnnMaybe ImportQualified dom stage
, _importSafe :: AnnMaybe ImportSafe dom stage
, _importPkg :: AnnMaybe StringNode dom stage
, _importModule :: Ann ModuleName dom stage
, _importAs :: AnnMaybe ImportRenaming dom stage
, _importSpec :: AnnMaybe ImportSpec dom stage
}
data ImportSpec dom stage
= ImportSpecList { _importSpecList :: AnnList IESpec dom stage
}
| ImportSpecHiding { _importSpecHiding :: AnnList IESpec dom stage
}
data ImportQualified dom stage = ImportQualified
data ImportSource dom stage = ImportSource
data ImportSafe dom stage = ImportSafe
data TypeNamespace dom stage = TypeNamespace
data ImportRenaming dom stage = ImportRenaming { _importRename :: Ann ModuleName dom stage }