readTopExpr :: String -> EvalM TopExpr
readTopExpr expr = do
  isSExpr <- asks optSExpr
  if isSExpr
     then either (throwError . Parser) return (SExpr.parseTopExpr expr)
     else do r <- lift . lift $ NonS.parseTopExpr expr
             either (throwError . Parser) return r
readTopExpr :: String -> EvalM TopExpr
readTopExpr expr = do
  isSExpr <- asks optSExpr
  if isSExpr
     then either (throwError . Parser) return (SExpr.parseTopExpr expr)
     else do r <- lift . lift $ NonS.parseTopExpr expr
             either (throwError . Parser) return r
readTopExpr expr = do
  isSExpr <- asks optSExpr
  if isSExpr
     then either (throwError . Parser) return (SExpr.parseTopExpr expr)
     else do r <- lift . lift $ NonS.parseTopExpr expr
             either (throwError . Parser) return r