add helper bind function
This commit is contained in:
parent
314458e445
commit
f138c7475b
|
@ -27,6 +27,9 @@ type InterpState = State ([Handle], Env) -- interpreter state (open handles, glo
|
||||||
lookup :: Env -> String -> Maybe Value
|
lookup :: Env -> String -> Maybe Value
|
||||||
lookup env name = M.lookup name env
|
lookup env name = M.lookup name env
|
||||||
|
|
||||||
|
bind :: Env -> String -> Value -> Env
|
||||||
|
bind env name value = M.insert name value env
|
||||||
|
|
||||||
(IntV l) +$ (IntV r) = IntV (l + r)
|
(IntV l) +$ (IntV r) = IntV (l + r)
|
||||||
(StrV l) +$ (StrV r) = StrV (l ++ r)
|
(StrV l) +$ (StrV r) = StrV (l ++ r)
|
||||||
l +$ r = error $ "cannot + " ++ show l ++ " and " ++ show r
|
l +$ r = error $ "cannot + " ++ show l ++ " and " ++ show r
|
||||||
|
@ -81,8 +84,8 @@ eval (Var var) = get >>= \(_,env) ->
|
||||||
|
|
||||||
eval (Def name v') = do
|
eval (Def name v') = do
|
||||||
v <- eval v'
|
v <- eval v'
|
||||||
(s,m) <- get
|
(s,env) <- get
|
||||||
put (s, M.insert name v m)
|
put (s, bind env name v)
|
||||||
return v
|
return v
|
||||||
|
|
||||||
eval (Lambda pats) =
|
eval (Lambda pats) =
|
||||||
|
|
Loading…
Reference in New Issue