Parsing 解析器函数中的故障处理

Parsing 解析器函数中的故障处理,parsing,haskell,parser-combinators,trifecta,Parsing,Haskell,Parser Combinators,Trifecta,我正在用库学习解析器组合器。我被介绍给typeclass及其函数 我的代码中有一个解析器函数,它的定义是 fractionOrDecimal :: Parser DoubleOrRational fractionOrDecimal = (Left <$> try parseDecimal) -- A <|> (Right <$> try parseFraction) --

我正在用库学习解析器组合器。我被介绍给typeclass及其函数

我的代码中有一个解析器函数,它的定义是

fractionOrDecimal :: Parser DoubleOrRational
fractionOrDecimal =
        (Left <$> try parseDecimal)                  -- A
    <|> (Right <$> try parseFraction)                -- B
    <|> (fail  "Expected Fraction or Decimal.")      -- Err
fractionOrDecimal::Parser DoubleOrRational
断裂的=
(左)-A
(右)-B
(未通过“预期分数或小数”-错误

它尝试将输入解析为十进制或分数,如果没有任何结果,则会失败。这种方法正确吗?或者我应该对失败(fail)进行不同的编码,而不是将其作为操作的一部分。

失败是由缺少成功的解析器编码的。Trifecta将为您跟踪预期的令牌,但您必须使用
告诉它它们的名称。你会这么做吗

fractionOrDecimal::Parser DoubleOrRational
断裂的=
(左尝试解析十进制“十进制”)
(右键“分数”)
我们现在得到如下错误:

>>> parseTest fractionalOrDecimal "neither fractional nor decimal"
error: expected: Decimal, Fractional
neither fractional nor decimal<EOF> 
^                       
>>parseTest分式逻辑分式“既不是小数也不是小数”
错误:应为十进制、小数
既不是小数也不是小数
^                       

失败是由于缺少成功的解析器而编码的。Trifecta将为您跟踪预期的令牌,但您必须使用
告诉它它们的名称。你会这么做吗

fractionOrDecimal::Parser DoubleOrRational
断裂的=
(左尝试解析十进制“十进制”)
(右键“分数”)
我们现在得到如下错误:

>>> parseTest fractionalOrDecimal "neither fractional nor decimal"
error: expected: Decimal, Fractional
neither fractional nor decimal<EOF> 
^                       
>>parseTest分式逻辑分式“既不是小数也不是小数”
错误:应为十进制、小数
既不是小数也不是小数
^                       
谢谢。直到功能。谢谢。TIL函数。