summaryrefslogtreecommitdiff
path: root/Haskell-book/24/LearnParsers/app/Main.hs
blob: 57ff0bf7fcd6255a05c22ea12fd7ecd741e21f5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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"