Skip to content

imclerran/roc-tinyparse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 

Repository files navigation

roc-tinyparse

A small parser combinator library for roc.

Roc-Lang GitHub last commit CI status Latest release

Examples

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))

About

A small parser combinator library for roc.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages