module Language.Haskell.Tools.AST.Representation.Modules where
import Language.Haskell.Tools.AST.Ann (Ann, AnnListG, AnnMaybeG)
import Language.Haskell.Tools.AST.Representation.Decls (UDecl)
import Language.Haskell.Tools.AST.Representation.Names (UStringNode, UName)
data UModule dom stage
= UModule { _filePragmas :: AnnListG UFilePragma dom stage
, _modHead :: AnnMaybeG UModuleHead dom stage
, _modImports :: AnnListG UImportDecl dom stage
, _modDecl :: AnnListG UDecl dom stage
}
data UModuleHead dom stage
= UModuleHead { _mhName :: Ann UModuleName dom stage
, _mhPragma :: AnnMaybeG UModulePragma dom stage
, _mhExports :: AnnMaybeG UExportSpecs dom stage
}
data UExportSpecs dom stage
= UExportSpecs { _espExports :: AnnListG UExportSpec dom stage }
data UExportSpec dom stage
= UDeclExport { _exportDecl :: Ann UIESpec dom stage
}
| UModuleExport { _exportModuleName :: Ann UModuleName dom stage
}
data UIESpec dom stage
= UIESpec { _ieModifier :: AnnMaybeG UImportModifier dom stage
, _ieName :: Ann UName dom stage
, _ieSubspec :: AnnMaybeG USubSpec dom stage
}
data UImportModifier dom stage
= UImportPattern
data USubSpec dom stage
= USubSpecAll
| USubSpecList { _essList :: AnnListG UName dom stage
}
data UFilePragma dom stage
= ULanguagePragma { _lpPragmas :: AnnListG ULanguageExtension dom stage
}
| UOptionsPragma { _opStr :: Ann UStringNode dom stage
}
data UModulePragma dom stage
= UModuleWarningPragma { _modWarningStr :: AnnListG UStringNode dom stage
}
| UModuleDeprecatedPragma { _modDeprecatedPragma :: AnnListG UStringNode dom stage
}
data ULanguageExtension dom stage = ULanguageExtension { _langExt :: String }
data UImportDecl dom stage
= UImportDecl { _importSource :: AnnMaybeG UImportSource dom stage
, _importQualified :: AnnMaybeG UImportQualified dom stage
, _importSafe :: AnnMaybeG UImportSafe dom stage
, _importPkg :: AnnMaybeG UStringNode dom stage
, _importModule :: Ann UModuleName dom stage
, _importAs :: AnnMaybeG UImportRenaming dom stage
, _importSpec :: AnnMaybeG UImportSpec dom stage
}
data UImportSpec dom stage
= UImportSpecList { _importSpecList :: AnnListG UIESpec dom stage
}
| UImportSpecHiding { _importSpecHiding :: AnnListG UIESpec dom stage
}
data UImportQualified dom stage = UImportQualified
data UImportSource dom stage = UImportSource
data UImportSafe dom stage = UImportSafe
data UTypeNamespace dom stage = UTypeNamespace
data UImportRenaming dom stage = UImportRenaming { _importRename :: Ann UModuleName dom stage }
data UModuleName dom stage = UModuleName { _moduleNameString :: String }
data TypeKeyword dom stage = TypeKeyword