casui-0.3: Casui/Module.hs
module Casui.Module where
import Casui.Name
import Casui.Value
import Casui.Utils
import Control.Monad
data ModuleList val = ModuleList { mlList :: [Module FullName val] }
data Module name val = Module {
mFullName :: FullName,
mImports :: [name],
mDefines :: [(Symbol, Maybe val)],
mProperties :: [(name, Property name val)]
}
type ModuleLibrary = ModuleList Expression
isBuiltIn :: Module FullName v -> Bool
isBuiltIn (mFullName -> FullName Builtin _) = True
isBuiltIn _ = False
findModules :: Name -> ModuleLibrary -> [Module FullName Expression]
findModules n (ModuleList l) = filter (matchName n . mFullName) l
resolveName :: Name -> ModuleList Expression -> Maybe FullName
resolveName (Name (reverse -> (name:(reverse -> path)))) modlist =
foldl mplus Nothing $
map (lookup name) $
map (\m -> map (flip (,) (mFullName m) . fst) (mDefines m)) $
findModules (Name path) modlist