popState :: (Monad m) => (MonadIO m) => SM m ()
popState = do
  liftIO $ putStrLn "push"
  cs <- get
  let (Just p) = parent cs
  put p

-- lua considers only "nil" and "false" as false values
-- everything else is true
popState :: (Monad m) => (MonadIO m) => SM m ()
popState = do
  liftIO $ putStrLn "push"
  cs <- get
  let (Just p) = parent cs
  put p

-- lua considers only "nil" and "false" as false values
-- everything else is true
popState = do
  liftIO $ putStrLn "push"
  cs <- get
  let (Just p) = parent cs
  put p

-- lua considers only "nil" and "false" as false values
-- everything else is true