recursive let bindings in evaluation

This commit is contained in:
Anders Papitto 2015-12-13 22:12:37 -08:00
parent ec8f875ff7
commit 267c8cf92d

View file

@ -109,12 +109,12 @@ evalExpr = cata phi
pure mergedEnv pure mergedEnv
_ -> error "invalid evaluation environment" _ -> error "invalid evaluation environment"
-- TODO: recursive binding
phi (NLet binds e) = \env -> case env of phi (NLet binds e) = \env -> case env of
(Fix (NVSet env')) -> do (Fix (NVSet env')) -> do
letenv <- evalBinds False env binds rec
let newenv = Map.union letenv env' mergedEnv <- pure $ Fix $ NVSet $ evaledBinds `Map.union` env'
e . Fix . NVSet $ newenv evaledBinds <- evalBinds True mergedEnv binds
e mergedEnv
_ -> error "invalid evaluation environment" _ -> error "invalid evaluation environment"
phi (NIf cond t f) = \env -> do phi (NIf cond t f) = \env -> do