A monadic parser combinator library
893
stars
286
commits
Haskell
primary language
Jun 9, 2026
updated
Please refer to the package description on Hackage for more information.
A monadic parser combinator library, written by Daan Leijen. Parsec is designed from scratch as an industrial-strength parser library. It is simple, safe, well documented, has extensive libraries, good error messages, and is fast.
Some links:
By analyzing Parsec's reverse dependencies on Hackage we can find open source project that make use of Parsec. For example bibtex, ConfigFile, csv and hjson.
This requires a working version of cabal and ghci, which are part of
any modern installation of Haskell, such as
Haskell Platform.
First install Parsec.
cabal install parsec
Below we show how a very simple parser that tests matching parentheses
was made from GHCI (the interactive GHC environment), which we started
with the ghci command).
Prelude> :m +Text.Parsec
Prelude Text.Parsec> let parenSet = char '(' >> many parenSet >> char ')' :: Parsec String () Char
Loading package transformers-0.3.0.0 ... linking ... done.
Loading package array-0.5.0.0 ... linking ... done.
Loading package deepseq-1.3.0.2 ... linking ... done.
Loading package bytestring-0.10.4.0 ... linking ... done.
Loading package mtl-2.1.3.1 ... linking ... done.
Loading package text-1.1.1.3 ... linking ... done.
Loading package parsec-3.1.5 ... linking ... done.
Prelude Text.Parsec> let parens = (many parenSet >> eof) <|> eof
Prelude Text.Parsec> parse parens "" "()"
Right ()
Prelude Text.Parsec> parse parens "" "()(())"
Right ()
Prelude Text.Parsec> parse parens "" "("
Left (line 1, column 2):
unexpected end of input
expecting "(" or ")"
The Right () results indicate successes: the parentheses matched.
The Left [...] result indicates a parse failure, and is detailed
with an error message.
For a more thorough introduction to Parsec we recommend the links at the top of this README file.
Issues (bugs, feature requests or otherwise feedback) may be reported in the Github issue tracker for this project.
Pull-requests are also welcome.
See the LICENSE file in the repository.
(top 30 of 45)
Haskell
100.0%
A monadic parser combinator library
893
stars
286
commits
Haskell
primary language
Jun 9, 2026
updated
Please refer to the package description on Hackage for more information.
A monadic parser combinator library, written by Daan Leijen. Parsec is designed from scratch as an industrial-strength parser library. It is simple, safe, well documented, has extensive libraries, good error messages, and is fast.
Some links:
By analyzing Parsec's reverse dependencies on Hackage we can find open source project that make use of Parsec. For example bibtex, ConfigFile, csv and hjson.
This requires a working version of cabal and ghci, which are part of
any modern installation of Haskell, such as
Haskell Platform.
First install Parsec.
cabal install parsec
Below we show how a very simple parser that tests matching parentheses
was made from GHCI (the interactive GHC environment), which we started
with the ghci command).
Prelude> :m +Text.Parsec
Prelude Text.Parsec> let parenSet = char '(' >> many parenSet >> char ')' :: Parsec String () Char
Loading package transformers-0.3.0.0 ... linking ... done.
Loading package array-0.5.0.0 ... linking ... done.
Loading package deepseq-1.3.0.2 ... linking ... done.
Loading package bytestring-0.10.4.0 ... linking ... done.
Loading package mtl-2.1.3.1 ... linking ... done.
Loading package text-1.1.1.3 ... linking ... done.
Loading package parsec-3.1.5 ... linking ... done.
Prelude Text.Parsec> let parens = (many parenSet >> eof) <|> eof
Prelude Text.Parsec> parse parens "" "()"
Right ()
Prelude Text.Parsec> parse parens "" "()(())"
Right ()
Prelude Text.Parsec> parse parens "" "("
Left (line 1, column 2):
unexpected end of input
expecting "(" or ")"
The Right () results indicate successes: the parentheses matched.
The Left [...] result indicates a parse failure, and is detailed
with an error message.
For a more thorough introduction to Parsec we recommend the links at the top of this README file.
Issues (bugs, feature requests or otherwise feedback) may be reported in the Github issue tracker for this project.
Pull-requests are also welcome.
See the LICENSE file in the repository.
(top 30 of 45)
Haskell
100.0%