Parsec is a monadic parser combinator library for Haskell. It can parse context-sensitive, infinite look-ahead grammars but performs best on predictive (LL1) grammars. The parser definition is in the same language as the rest of the program, so it benefits from type checking and existing development tools. Parsers are first-class values within the language and it is easy to extend the set of parsers with custom-made ones.