-- | Resolves dependencies module Descript.BasicInj.Read.Resolve ( extraModule ) where import Descript.BasicInj.Read.Resolve.Subst import Descript.BasicInj.Data import Descript.Misc -- | Contains imported data used by the module. extraModule :: (Monad u) => DepResolver u -> ImportCtx an -> DirtyDepT an u extraModule rsvr (ImportCtx _ mdecl idecls) = mconcat <$> traverse (resolveImportDep rsvr mascope) idecls where mascope = modulePathScope $ moduleDeclPath mdecl -- | Resolves the dependency for the module with the given scope -- specified by the given import declaration. resolveImportDep :: (Monad u) => DepResolver u -> AbsScope -> ImportDecl an -> DirtyDepT an u resolveImportDep rsvr mascope (ImportDecl _ ipath isrcs idsts) = substDstImports idsts_ . substSrcImports isrcs_ <$> resolveImportDep' rsvr mascope ipath where isrcs_ = map remAnns $ isrcs idsts_ = map remAnns $ idsts -- | Resolves the dependency for the module with the given scope -- specified by the given import path - doesn't apply substitutions. resolveImportDep' :: (Monad u) => DepResolver u -> AbsScope -> ModulePath an -> DirtyDepT an u resolveImportDep' rsvr mascope ipath = resToDirtyMonT $ mapErrorT (TagdDepError iann mascope) $ resolveDep rsvr iscope where iscope = iascope `scopeRelToSib` mascope iascope = modulePathScope ipath iann = getAnn ipath