casui-0.3: Casui/Compile.hs
{-# LANGUAGE ScopedTypeVariables #-}
module Casui.Extend where
import Casui.Name
import Casui.Utils
import Casui.Value
import Casui.Module
import Casui.Parse
import Casui.Casui
import Data.Either
import Control.Monad
type CompileModuleResult = Either (TagError [(ParsedName, [FullName])])
compileModule :: Module ParsedName ParsedValue -> Casui s (CompileModuleResult CompiledModule)
compileModule mod = do
elist <- listModuleImports mod
flip (either (return . Left)) elist $ \mlist -> do
ctx <- return . Context [] . ModuleList . (mlist ++) =<< listBuiltinModules
withContext ctx $ do
return undefined
listModuleImports :: ParsedModule -> Casui s (CompileModuleResult [CompiledModule])
listModuleImports mod = do
(imps :: [Either (ParsedName, [FullName]) CompiledModule])
<- forM (mImports mod) $ \pn@(ParsedName loc name) -> do
ms <- getModules name
return $ case ms of
[m] -> Right $ m
l -> Left $ (pn, map mFullName l)
case imps of
(lefts -> l@(_:_)) -> return $ Left $ err "Error finding imports" l
(rights -> l) -> return $ Right $ l