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