module ModSysSem(mProgram) where
import Modules
import CheckModules
import ModSysAST
import NamesEntities
import Relations(Rel,emptyRel)
mProgram ::
[Module] -> Either [[ModSysErr]]
[(Rel QName Entity,Rel Name Entity)]
mProgram modules
| not (all null errs) = Left errs
| otherwise = Right rels
where
rels = computeInsOuts (const emptyRel) modules
errs = zipWith (chkModule expsOf) inscps modules
(inscps,exps) = unzip rels
expsOf m = lookup m mod_exps
mod_exps = map modName modules `zip` exps