module DDC.Source.Tetra.Module
(
Module (..)
, isMainModule
, ExportSource (..)
, ImportType (..)
, ImportCap (..)
, ImportValue (..)
, QualName (..)
, ModuleName (..)
, isMainModuleName
, Top (..)
, DataDef (..))
where
import DDC.Source.Tetra.Exp
import DDC.Source.Tetra.DataDef
import Control.DeepSeq
import DDC.Core.Module
( QualName (..)
, ModuleName (..)
, isMainModuleName
, ExportSource (..)
, ImportType (..)
, ImportCap (..)
, ImportValue (..))
data Module l
= Module
{
moduleName :: !ModuleName
, moduleExportTypes :: [GName l]
, moduleExportValues :: [GName l]
, moduleImportModules :: [ModuleName]
, moduleImportTypes :: [(GName l, ImportType (GName l))]
, moduleImportCaps :: [(GName l, ImportCap (GName l))]
, moduleImportValues :: [(GName l, ImportValue (GName l))]
, moduleTops :: [Top l] }
deriving instance ShowLanguage l => Show (Module l)
instance NFDataLanguage l => NFData (Module l) where
rnf !mm
= rnf (moduleName mm)
`seq` rnf (moduleExportTypes mm)
`seq` rnf (moduleExportValues mm)
`seq` rnf (moduleImportModules mm)
`seq` rnf (moduleImportTypes mm)
`seq` rnf (moduleImportCaps mm)
`seq` rnf (moduleImportValues mm)
`seq` rnf (moduleTops mm)
isMainModule :: Module l -> Bool
isMainModule mm
= isMainModuleName $ moduleName mm
data Top l
= TopClause
{ topAnnot :: GAnnot l
, topClause :: GClause l }
| TopData
{ topAnnot :: GAnnot l
, topDataDef :: DataDef (GName l) }
deriving instance ShowLanguage l => Show (Top l)
instance NFDataLanguage l => NFData (Top l) where
rnf !top
= case top of
TopClause a c -> rnf a `seq` rnf c
TopData a def -> rnf a `seq` rnf def