Ошибка кодируется отсутствием успешного парсера.Trifecta отследит ожидаемые для вас токены, но вы должны сказать, как они называются, используя <?>
.Таким образом, вы бы сделали
fractionOrDecimal :: Parser DoubleOrRational
fractionOrDecimal =
(Left <$> try parseDecimal <?> "Decimal")
<|> (Right <$> try parseFraction <?> "Fractional")
Теперь мы получаем такие ошибки:
>>> parseTest fractionalOrDecimal "neither fractional nor decimal"
error: expected: Decimal, Fractional
neither fractional nor decimal<EOF>
^