implement Access eval
This commit is contained in:
parent
ee9609471d
commit
c311d22c85
10
interp.hs
10
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 (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 (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
|
eval (Call lhs arg) = do
|
||||||
(h,env) <- get
|
(h,env) <- get
|
||||||
v <- eval lhs
|
v <- eval lhs
|
||||||
|
|
Loading…
Reference in New Issue