added a Read instance (based on parser combinators)