-findVariable :: (MonadState Variables m) => Ident -> Variables -> m Value
-findVariable i [] = fail $ "Variable "++show i++" not found in any scope."
-findVariable i (m:ms) = if member i m then lookup i m else findVariable i ms
+setVariableValue :: Ident -> Exp -> StateT Variables IO Value
+setVariableValue i e = do
+ v <- eval e
+ ms <- get
+ put $ updateVariable i v ms
+ return v
+
+updateVariable :: Ident -> Value -> Variables -> Variables
+updateVariable _ _ [] = []
+updateVariable i v (m:ms) = if member i m then insert i v m:ms else m:updateVariable i v ms
+