aboutsummaryrefslogtreecommitdiffstats
path: root/src/Utils.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Utils.hs')
-rw-r--r--src/Utils.hs36
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 =