parseAndEvaluateCommand :: SIO.Handle -> String -> St -> IO (St)
parseAndEvaluateCommand handle cmd st = do
  commandToSend <- parse cmd
  st''' <- case commandToSend of
    Right c -> do
      eitherSt <- evaluateCommand c handle st
      let st'' = case eitherSt of
                   Right stt -> set lastError "" stt
                   Left msg -> set lastError msg st 
      return st''
    Left msg -> do
      let st' = set lastError msg st
      return st'
  return st'''
parseAndEvaluateCommand :: SIO.Handle -> String -> St -> IO (St)
parseAndEvaluateCommand handle cmd st = do
  commandToSend <- parse cmd
  st''' <- case commandToSend of
    Right c -> do
      eitherSt <- evaluateCommand c handle st
      let st'' = case eitherSt of
                   Right stt -> set lastError "" stt
                   Left msg -> set lastError msg st 
      return st''
    Left msg -> do
      let st' = set lastError msg st
      return st'
  return st'''
parseAndEvaluateCommand handle cmd st = do
  commandToSend <- parse cmd
  st''' <- case commandToSend of
    Right c -> do
      eitherSt <- evaluateCommand c handle st
      let st'' = case eitherSt of
                   Right stt -> set lastError "" stt
                   Left msg -> set lastError msg st 
      return st''
    Left msg -> do
      let st' = set lastError msg st
      return st'
  return st'''