From c311d22c851134a5beb990b2564d5af846653c34 Mon Sep 17 00:00:00 2001 From: darkf Date: Tue, 29 Oct 2013 02:09:18 -0700 Subject: [PATCH] implement Access eval --- interp.hs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/interp.hs b/interp.hs index 1f456e3..75f3660 100644 --- a/interp.hs +++ b/interp.hs @@ -285,6 +285,16 @@ eval (NotEquals l r) = do { l <- eval l; r <- eval r; return $ l !=$ r } eval (LessThan l r) = do { l <- eval l; r <- eval r; return $ l <$ r } eval (GreaterThan l r) = do { l <- eval l; r <- eval r; return $ l >$ r } +eval (Access left (Var right)) = do + lhs <- eval left + case lhs of + DictV dict -> + case M.lookup (StrV right) dict of + Just v -> return v + Nothing -> return $ TupleV [StrV "nothing"] + _ -> error $ "op/: need a dict, got " ++ show lhs +eval (Access _ _) = error "op/: RHS must be an identifier" + eval (Call lhs arg) = do (h,env) <- get v <- eval lhs