This package provides Haskell bindings for
<https://github.com/jgm/cmark libcmark>, the reference
parser for <http://commonmark.org CommonMark>, a fully
specified variant of Markdown. It includes sources for
libcmark (0.19.0) and does not require prior installation of the
cmark provides the following advantages over existing
Markdown libraries for Haskell:
- Speed: Conversion speed is on par with the
library. We were unable to measure precisely
which raised a malloc error when compiled into our
benchmark suite. Relative to other implementations:
cmark was 82 times faster than
59 times faster than
105 times faster than
and 2.8 times faster than
- Memory footprint: Memory footprint is on par with
On one sample, the library uses a fourth the memory that
uses, and less than a tenth the memory that
- Robustness: cmark can handle whatever is thrown
at it, without the exponential blowups in parsing
time one can sometimes get with other libraries.
(The input @bench\/full-sample.md@, for example,
to grind to a halt.)
- Accuracy: cmark passes the CommonMark spec\'s
suite of over 500 conformance tests.
- Standardization: Since there is a spec and a
comprehensive suite of tests, we can have a high
degree of confidence that any two CommonMark
implementations will behave the same. Thus, for
example, one could use this library for server-side
for client-side previewing.
- Ease of installation: cmark is portable and has
cmark does not provide Haskell versions of the whole
<https://github.com/jgm/cmark libcmark> API, which is
built around mutable @cmark_node@ objects. Instead, it
provides functions for converting CommonMark to HTML
(and other formats), and a function for converting
CommonMark to a @Node@ tree that can be processed
further using Haskell.
A note on security: This library does not attempt
to sanitize HTML output. We recommend using
to filter the output.
A note on stability: There is a good chance the API
will change significantly after this early release.