From f138c7475b8d2d12d4e3e633522cc2a72078d718 Mon Sep 17 00:00:00 2001 From: darkf Date: Sun, 20 Oct 2013 16:32:23 -0700 Subject: [PATCH] add helper bind function --- interp.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/interp.hs b/interp.hs index 97490ce..1919daf 100644 --- a/interp.hs +++ b/interp.hs @@ -27,6 +27,9 @@ type InterpState = State ([Handle], Env) -- interpreter state (open handles, glo lookup :: Env -> String -> Maybe Value 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) (StrV l) +$ (StrV r) = StrV (l ++ r) l +$ r = error $ "cannot + " ++ show l ++ " and " ++ show r @@ -81,8 +84,8 @@ eval (Var var) = get >>= \(_,env) -> eval (Def name v') = do v <- eval v' - (s,m) <- get - put (s, M.insert name v m) + (s,env) <- get + put (s, bind env name v) return v eval (Lambda pats) =