casui-0.3: Casui/Casui.hs
module Casui.Casui where
import Casui.Module
import Casui.Value
import Casui.Name
data Env = Env {
envModuleLibrary :: ModuleLibrary
-- TODO
}
data Context = Context {
ctxLocal :: [(Symbol, Expression)],
ctxModules :: ModuleList Expression
}
data Casui s a = Casui (s -> Context -> Env -> IO (a, Env))
instance Monad (Casui l) where
(Casui f) >>= g = Casui $ \s c e -> do
(a, e) <- f s c e
let Casui h = g a
h s c e
return a = Casui $ \s c e -> return (a, e)
instance Functor (Casui s) where
fmap g (Casui f) = Casui $ \s c e -> do
(a, e) <- f s c e
return (g a, e)
env :: Casui s Env
env = Casui $ \s c e -> return $ (,) e e
withContext :: Context -> Casui s a -> Casui s a
withContext c (Casui f) = Casui $ \s _ e -> f s c e
listBuiltinModules :: Casui s [CompiledModule]
listBuiltinModules = do
fmap (filter isBuiltIn . mlList . envModuleLibrary) env
getModules :: Name -> Casui l [Module FullName Expression]
getModules name = fmap (findModules name . envModuleLibrary) env
type CompiledModule = Module FullName Expression