polyglot-0.1.1.0: src/SyntaxTrees/Haskell/ModuleDef.hs
module SyntaxTrees.Haskell.ModuleDef where
import SyntaxTrees.Haskell.ClassDef (ClassDef, DerivingDef, InstanceDef)
import SyntaxTrees.Haskell.Common (Module, Var, VarOp)
import SyntaxTrees.Haskell.DataDef (DataDef, NewTypeDef, TypeDef)
import SyntaxTrees.Haskell.FnDef (FnDefOrSig, InfixFnAnnotation)
import SyntaxTrees.Haskell.Type (TypeVar)
data ModuleDef
= ModuleDef
{ name :: Module
, export :: Maybe ModuleExport
, imports :: [ModuleImport]
, defs :: [InternalDef]
}
deriving (Show)
newtype ModuleExport
= ModuleExport [ModuleExportDef]
deriving (Show)
data ModuleExportDef
= ModuleExportDef ImportExportDef
| FullModuleExport Module
deriving (Show)
data ModuleImport
= ModuleImport
{ qualified :: Bool
, module' :: Module
, alias :: Maybe Module
, hiding :: Bool
, importDefs :: [ModuleImportDef]
}
deriving (Show)
data ModuleImportDef
= ModuleImportDef ImportExportDef
deriving (Show)
data ImportExportDef
= Member ModuleMember
| FullData TypeVar
| FilteredData TypeVar [ModuleMember]
deriving (Show)
data ModuleMember
= VarMember Var
| VarOpMember VarOp
| DataMember TypeVar
deriving (Show)
data InternalDef
= TypeDef' TypeDef
| NewTypeDef' NewTypeDef
| DataDef' DataDef
| FnDefOrSig' FnDefOrSig
| ClassDef' ClassDef
| InstanceDef' InstanceDef
| DerivingDef' DerivingDef
| InfixFnAnnotation' InfixFnAnnotation
deriving (Show)