// the find
Marwes/combine
A parser combinator library for Rust
A parser combinator library for Rust, modeled after Haskell's Parsec. Targets the space between nom (macro-heavy, byte-oriented) and hand-rolled parsers — you build parsers by composing functions rather than writing a grammar DSL. Useful when you want type-safe parsing without a code generator.
Partial parsing support is the standout feature — you can pause mid-parse and resume when more data arrives, which is genuinely useful for async I/O without buffering the entire input. Zero-copy range parsers avoid allocations when working with in-memory slices. The stream abstraction is flexible enough that you can parse `&str`, `&[u8]`, iterators, or custom streams with the same combinator code. Real-world adoption (graphql-parser, redis-rs, toml_edit) is a better signal than toy examples.
nom has largely won the Rust parser combinator wars — combine has 1.3k stars vs nom's 9k+, which means fewer maintained integrations, less Stack Overflow coverage, and slower ecosystem uptake when new Rust editions land. Error messages require explicit wrapping with `State` to get line/column positions; the default pointer-offset positions are nearly useless in practice. The library is showing its age: Travis CI badges (GitHub Actions migration happened but the README wasn't fully updated), Gitter links are dead, and the last meaningful activity suggests maintenance is minimal. Compile times with deep combinator chains can get painful — the type system encodes parser structure, so complex grammars produce complex monomorphized types.