-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEnv.hs
More file actions
38 lines (28 loc) · 715 Bytes
/
Env.hs
File metadata and controls
38 lines (28 loc) · 715 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
module Env where
import Control.Monad.State
import Control.Monad.Trans.Reader
import Control.Monad.Trans.Except
import Types
import qualified Data.Map as M
import qualified Memory as Mem
empty = M.empty
resolve name = do
env <- ask
case M.lookup name env of
Nothing -> iThrow $ name ++ " is not defined"
Just k -> return k
assign name = do
env <- ask
loc <- Mem.alloc
return $ M.insert name loc env
modify f name = do
loc <- resolve name
Mem.updateVar f loc
return()
set name value = do
loc <- resolve name
Mem.setVar loc value
return()
get name = do
loc <- resolve name
Mem.getVar loc