import Text.Parsers.Frisby additive :: forall s . PM s (P s Integer) additive = mdo additive <- newRule $ multitive <> char '+' ->> additive ## uncurry (+) // multitive multitive <- newRule $ primary <> char '*' ->> multitive ## uncurry (*) // primary primary <- newRule $ char '(' ->> additive <<- char ')' // decimal decimal <- newRule $ many1 (oneOf ['0' .. '9']) ## read return additive main = do c <- getContents print (runPeg additive c)