Parser (version 2) ------------------ program = succeed Program `ap` definitions `ap` expression `chk` eof definitions = many definition definition = succeed Definition `ap` identifier `ap` identifiers `chk` literal "=" `ap` expression `chk` literal ";" identifiers = many identifier expression = succeed Application `ap` identifier `ap` atomicExpression s `alt` atomicExpression atomicExpressions = many atomicExpression atomicExpression = succeed Number `ap` number `alt` succeed id `chk` literal "(" `ap` expression `chk` literal ")" identifier = satisfy (all isAlpha) number = succeed read `ap` satisfy (all isDigit)