A small parser combinator library for roc.
expect
parser = string("Hello")
parser("Hello, world!") == Ok(("Hello", ", world!"))
expect
parser = string("Hello")
parser("Hello, world!") |> finalize_lazy == Ok("Hello")
expect
parser = string("Hello") |> lhs(comma) |> lhs(whitespace) |> both(string("world"))
parser("Hello, world!") |> finalize_lazy == Ok(("Hello", "world"))
dot = char |> filter(|c| c == '.')
expect
pattern = maybe(string("v")) |> rhs(integer) |> lhs(dot) |> both(integer) |> lhs(dot) |> both(integer)
parser = pattern |> map(|((major, minor), patch)| Ok({major, minor, patch}))
parser("v1.2.34") |> finalize == Ok({major: 1, minor: 2, patch: 34 })
expect
parser = rhs(maybe(string("v")), zip_3(integer, rhs(dot, integer), rhs(dot, integer)))
parser("v1.2.34_abc") |> finalize_lazy == Ok((1, 2, 34))
major = integer |> map(|n| Ok(Major(n)))
minor = maybe(dot |> rhs(integer)) |> map(|maybe_n| Ok(Maybe.map(maybe_n, Minor, NoMinor)))
patch = maybe(dot |> rhs(integer)) |> map(|maybe_n| Ok(Maybe.map(maybe_n, Patch, NoPatch)))
semver = rhs(maybe(string("v")), zip_3(major, minor, patch))
expect semver("v1.2.34_abc") |> finalize_lazy == Ok((Major(1), Minor(2), Patch(34)))
expect semver("123") |> finalize_lazy == Ok((Major(123), NoMinor, NoPatch))