diff options
Diffstat (limited to 'src/Utils.hs')
| -rw-r--r-- | src/Utils.hs | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/Utils.hs b/src/Utils.hs index 4421f8a..c215b2e 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -22,7 +22,18 @@ data Config = Config { configUseREPL :: Bool } -type Env = M.Map String AST +type EnvMap = M.Map String AST + +data Env = Env { + envThis :: EnvMap, + envImported :: EnvMap +} + +emptyEnv :: Env +emptyEnv = Env { + envThis = M.empty, + envImported = M.empty +} data LState = LState { stateConfig :: Config, @@ -47,14 +58,25 @@ getConfig = do s <- get return $ stateConfig s -putEnv :: Env -> LContext () -putEnv env = do - modify (\s -> s { stateEnv = env }) +putThisEnv :: EnvMap -> LContext () +putThisEnv env = do + modify (\s -> let prevEnv = stateEnv s + in s { stateEnv = prevEnv { envThis = env } }) + +putImportedEnv :: EnvMap -> LContext () +putImportedEnv env = do + modify (\s -> let prevEnv = stateEnv s + in s { stateEnv = prevEnv { envImported = env } }) + +insertThisEnv :: String -> AST -> LContext () +insertThisEnv k v = do + env <- getEnv + putThisEnv $ M.insert k v (envThis env) -insertEnv :: String -> AST -> LContext () -insertEnv k v = do +insertImportedEnv :: String -> AST -> LContext () +insertImportedEnv k v = do env <- getEnv - putEnv $ M.insert k v env + putThisEnv $ M.insert k v (envImported env) incrementDepth :: LContext () incrementDepth = |
