refreshed README.md

This commit is contained in:
mrkkrp 2015-08-17 23:08:17 +06:00
parent 67d2a9369b
commit f6e6010a52

View File

@ -1,45 +1,52 @@
# Megaparsec
*Note that this is work in progress.*
[![License BSD3](https://img.shields.io/badge/license-BSD3-brightgreen.svg)](http://opensource.org/licenses/BSD-3-Clause)
[![Build Status](https://travis-ci.org/mrkkrp/megaparsec.svg?branch=master)](https://travis-ci.org/mrkkrp/megaparsec)
[![Coverage Status](https://coveralls.io/repos/mrkkrp/megaparsec/badge.svg?branch=master&service=github)](https://coveralls.io/github/mrkkrp/megaparsec?branch=master)
This is industrial-strength monadic parser combinator library. Megaparsec is
a fork of original Parsec library written by Daan Leijen. This library is
different from Parsec in the following ways:
a fork of Parsec library originally written by Daan Leijen.
* Original Parsec consists of quite ancient code-base and has certain
stylistic problems that's anyone who tries to compile Parsec with `-Wall`
option can notice. This has been refreshed in Megaparsec. The changes are
mainly cosmetic but not limited to them.
Megaparsec is different from Parsec in the following ways:
* Some quirks and old «buggy features» (as well as plain bugs) are fixed.
* Better error messages. We test our error messages using dense QuickCheck
tests. Good error messages are just as important for us as correct return
values of our parsers. Megaparsec will be especially useful if you write
compiler or interpreter for some language.
* Original Parsec uses rather weak collection of tests: a test per bug,
obviously to prevent regression. Our aim is to write complete test-suite
with QuickCheck to cover 100% of Megaparsec code. You can understand need
for this test-suite if you look at `CHANGELOG.md` file that includes
Parsec-era changes. The word «regression» mentioned quite frequently.
* Some quirks and “buggy features” (as well as plain bugs) of original
Parsec are fixed. There is no undocumented surprising stuff in Megaparsec.
* Megaparsec looks into future, it does not contain code that serves for
* Better support for Unicode parsing in `Text.Megaparsec.Char`.
* Megaparsec has more powerful combinators and can parse languages where
indentation matters.
* Comprehensive QuickCheck test suite covering nearly 100% of our code.
* We have benchmarks to detect performance regressions.
* Better documentation, with 100% of functions covered, without typos and
obsolete information, with working examples. Megaparsec's documentation is
well-structured and doesn't contain things useless to end user.
* Megaparsec's code is clearer and doesn't contain “magic” found in original
Parsec (just look at how Parsec generate error-messages, you can find more
in [issue #14](https://github.com/mrkkrp/megaparsec/issues/14) of
Megaparsec, this is just one example).
* Megaparsec looks into the future, it does not contain code that serves for
compatibility purposes, it also requires more recent version of `base`.
* Finally, we have fixed numerous typos and other minor flaws.
The reason for creating separate version of the project was inactivity of
its current maintainer who reduced active contributions to something like
one commit in three months and indefinitely delayed merging of our
contributions without any explanation. We wanted to improve Parsec and we
had some ideas how this can be achieved, so we decided to create our own
version of Parsec.
## Contributing
Issues (bugs, feature requests or otherwise feedback) may be reported in
[the Github issue tracker for this project](https://github.com/mrkkrp/megaparsec/issues).
Pull-requests are also welcome (and yes they will get attention and will be
merged quickly if they are good).
Pull-requests are also welcome (and yes, they will get attention and will be
merged quickly if they are good, we are progressive folks).
## License