added earlier work on parser combinator