function :: Parser Expr function = indentBlock $ do rword "let" name <- word args <- many word char '=' return (L.IndentMany Nothing (return . Function name args ) expr')
expr' :: Parser Expr expr' = try function <|> ...
Вопрос: как сделать так, чтобы в любой функции можно было бы объявить функцию, но в случае ошибки парсер бы не уходил в бесконечную рекурсию?
выложите весь код, если хотите, чтобы кто-то поискал неправильную рекурсию вместе с вами
есть в мегапарсек туторе об этом замечание, что не нужно в L.space передавать парсеры, которые успешные, но ничего не поглощают токены, вместо этого нужно empty использовать