*1 variants into base combinators with ~at_least parameter. many1 → many ~at_least:1, take_while1 → take_while ~at_least:1, sep_by1 → sep_by ~at_least:1, end_by1 → end_by ~at_least:1, whitespace1 → whitespace ~at_least:1. The ~at_least parameter generalizes beyond the binary zero-vs-one distinction (e.g., many ~at_least:3 requires at least three matches). The old chainl1 and chainr1 were also removed in favor of making the default argument optional (see next item).chainl/chainr to fold_left/fold_right with ~otherwise. chainl1 p op → fold_left p op, chainl p op default → fold_left p op ~otherwise:default, and likewise for chainr/fold_right. The new names better describe what the combinators do (parse and fold with associativity) and align with OCaml's List.fold_left/List.fold_right naming conventions. The ~otherwise labeled argument replaces the old positional default parameter, providing a fallback value when zero elements match.Initial release of Parseff -- a direct-style parser combinator library for OCaml 5 powered by algebraic effects.
unit -> 'a functions, no monadic or binding operators needed`Expected, `Unexpected_end_of_input, `Depth_limit_exceededor_, one_of, and one_of_labeledconsume, satisfy, char, match_regex, take_while, skip_while, fail, errormany, sep_by, between, end_by, count, optionalfold_left, fold_right for expression parsingrec_ (default depth: 128)digit, letter, alphanum, whitespace, any_chartake_while_span, sep_by_take_span returning { buf; off; len } recordssep_by_take, fused_sep_take, skip_while_then_charSource.of_string, Source.of_channel, Source.of_functionwarn / warn_at, rolled back on backtrackingparse_until_end / parse_source_until_end runners that collect diagnosticsexpect and one_of_labeled for clear error messagesre for regex support