module DDC.Source.Tetra.Module
(
Module (..)
, isMainModule
, ExportSource (..)
, ImportSource (..)
, 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 (..)
, ImportSource (..))
data Module a n
= Module
{
moduleName :: !ModuleName
, moduleExportTypes :: [n]
, moduleExportValues :: [n]
, moduleImportModules :: [ModuleName]
, moduleImportTypes :: [(n, ImportSource n)]
, moduleImportValues :: [(n, ImportSource n)]
, moduleTops :: [Top a n] }
deriving Show
instance (NFData a, NFData n) => NFData (Module a n) where
rnf !mm
= rnf (moduleName mm)
`seq` rnf (moduleExportTypes mm)
`seq` rnf (moduleExportValues mm)
`seq` rnf (moduleImportModules mm)
`seq` rnf (moduleImportTypes mm)
`seq` rnf (moduleImportValues mm)
`seq` rnf (moduleTops mm)
isMainModule :: Module a n -> Bool
isMainModule mm
= isMainModuleName
$ moduleName mm
data Top a n
= TopBind a (Bind n) (Exp a n)
| TopData
{ topAnnot :: a
, topDataDef :: DataDef n }
deriving Show
instance (NFData a, NFData n) => NFData (Top a n) where
rnf !top
= case top of
TopBind a b x
-> rnf a `seq` rnf b `seq` rnf x
TopData a def
-> rnf a `seq` rnf def