eval (Assign ns vs) = do
  vs' <- evalList vs []
  doMultipleAssign $ zip (Prelude.map (\(Var s) -> s) ns) vs'
    where
      doMultipleAssign [] = return Nil
      doMultipleAssign (p:ps) = do
        let (name, value) = p
        s <- get
        let t = symbolTable s
        put (modifyST s (M.insert name value t))
        doMultipleAssign ps
eval (Assign ns vs) = do
  vs' <- evalList vs []
  doMultipleAssign $ zip (Prelude.map (\(Var s) -> s) ns) vs'
    where
      doMultipleAssign [] = return Nil
      doMultipleAssign (p:ps) = do
        let (name, value) = p
        s <- get
        let t = symbolTable s
        put (modifyST s (M.insert name value t))
        doMultipleAssign ps
eval (Assign ns vs) = do
  vs' <- evalList vs []
  doMultipleAssign $ zip (Prelude.map (\(Var s) -> s) ns) vs'
    where
      doMultipleAssign [] = return Nil
      doMultipleAssign (p:ps) = do
        let (name, value) = p
        s <- get
        let t = symbolTable s
        put (modifyST s (M.insert name value t))
        doMultipleAssign ps