避免在解析器库中的解析器中使用失败

Răz*_*nda 2 parsing haskell parser-combinators

据我所知,不建议使用失败,以后将删除它。

在以下Parsers/Trifecta示例中,应该正确使用什么而不是失败?

parserNaturalNoLeadZero :: Parser Integer
parserNaturalNoLeadZero = do
  digits <- some digit
  if length digits > 1 && head digits == '0'
    then fail "Leading Zeros"
    else return $ read digits
Run Code Online (Sandbox Code Playgroud)

lef*_*out 6

正如文档告诉您的那样,MonadFail正在引入一个新类来履行该角色。

但是,对于解析器之类的东西,明智的选择通常是empty,它已经存在了很长时间。