Parser (version 1) ------------------ program = definitions `seq` expression `getl` eof `using` (\(defs,exp) -> Program defs exp) definitions = many definition definition = identifier `seq` identifiers `seq` literal "=" `getr` expression `getl` literal ";" `using` (\(id,(args ,ex pr )) -> Definition id args expr) identifiers = many identifier expression = identifier `seq` atomicExpressions `using` (\(i,es) -> Application i es) `alt` atomicExpression atomicExpressions = many atomicExpression atomicExpression = number `alt` literal "(" `getr` expression `getl` literal ")" identifier = satisfy (all isAlpha) number = satisfy (all isDigit) `using` read