parseText :: String -> String -> Either String [Expr]
parseText fname contents =
    case parse parseStatements fname (preprocess contents) of
        Left err -> Left $ show err
        Right ast -> Right $ removeParens . indirPass $ ast

-- reads, preprocesses, and parses a file. Reads with #includes
parseText :: String -> String -> Either String [Expr]
parseText fname contents =
    case parse parseStatements fname (preprocess contents) of
        Left err -> Left $ show err
        Right ast -> Right $ removeParens . indirPass $ ast

-- reads, preprocesses, and parses a file. Reads with #includes
parseText fname contents =
    case parse parseStatements fname (preprocess contents) of
        Left err -> Left $ show err
        Right ast -> Right $ removeParens . indirPass $ ast

-- reads, preprocesses, and parses a file. Reads with #includes