我正在寻找尝试使用第一个解析器的解析器,如果成功则返回Left a
,或者如果失败,请尝试第二个解析器并返回Right b
。换句话说,带有签名的东西:
Parser a -> Parser b -> Parser (Either a b)
例如,type Parser a = P.Parsec String () a
我自己实施起来并不是特别困难:
parseEither pa pb = (Left <$> pa) <|> (Right <$> pb)
但它似乎是一个非常有用且微不足道的构造,我想知道Parsec库中是否存在类似的东西。