module Main where import Control.Applicative import LearnParsers import Text.Fractions import Text.Trifecta import Text.Parser.Combinators unitOfSuccess :: (TokenParsing m, Monad m) => m Integer unitOfSuccess = do number <- integer _ <- eof return number type FractionOrNumber = Either Rational Integer parseFractionOrNumber :: Parser FractionOrNumber parseFractionOrNumber = skipMany (oneOf "\n") >> (Left <$> try virtuousFraction) <|> (Right <$> integer) main :: IO () main = do print $ parseString unitOfSuccess mempty "123"