我正在使用Trifecta库学习 Parser Combinators。我被介绍给Alternative typeclass 和它的 <|> 函数。
我的代码中有一个解析器函数,其定义是
fractionOrDecimal :: Parser DoubleOrRational
fractionOrDecimal =
(Left <$> try parseDecimal) -- A
<|> (Right <$> try parseFraction) -- B
<|> (fail "Expected Fraction or Decimal.") -- Err
它试图将输入解析为小数或分数,如果没有任何效果则失败。这种方法是否正确,或者我应该以不同的方式对失败(失败)进行编码,而不是作为 <|> 操作的一部分。