A simple parser combinator
No dependencies
No dependents
test { let parser = pstring("Hello").and_then(pint) let Some(result, _) = parser.parse(Seq::from_string("Hello1234")) inspect(result, content="Hello")}
pub type Parser[Token, Value] (Seq[Token]) -> (Value, Seq[Token])?
fn Parser::and_then[Token, A, B](self : Parser[Token, A], other : Parser[Token, B]) -> Parser[Token, (A, B)]
fn Parser::apply[Token, A, B](self : Parser[Token, A], f : Parser[Token, (A) -> B]) -> Parser[Token, B]
fn Parser::between[Token, A, B](self : Parser[Token, A], around : Parser[Token, B]) -> Parser[Token, A]
fn Parser::from_ref[Token, A](self : Ref[Parser[Token, A]]) -> Parser[Token, A]
fn Parser::map[Token, A, B](self : Parser[Token, A], f : (A) -> B) -> Parser[Token, B]
fn Parser::new[Token, Value](f : (Seq[Token]) -> (Value, Seq[Token])?) -> Parser[Token, Value]
fn Parser::omit_first[Token, A, B](parser : Parser[Token, (A, B)]) -> Parser[Token, B]
fn Parser::omit_second[Token, A, B](parser : Parser[Token, (A, B)]) -> Parser[Token, A]
fn Parser::optional[Token, A](self : Parser[Token, A]) -> Parser[Token, A?]
fn Parser::or_else[Token, A](self : Parser[Token, A], other : Parser[Token, A]) -> Parser[Token, A]
fn Parser::or_others[Token, A](self : Parser[Token, A], others : ArrayView[Parser[Token, A]]) -> Parser[Token, A]
fn Parser::parse[Token, Value](self : Parser[Token, Value], sequence : Seq[Token]) -> (Value, Seq[Token])?
fn Parser::repeat[Token, A](self : Parser[Token, A]) -> Parser[Token, Array[A]]
fn Parser::repeat_0_to_n[Token, A](self : Parser[Token, A], n : Int) -> Parser[Token, Array[A]]
fn Parser::repeat_0_to_n_with_sep[Token, A, B](self : Parser[Token, A], n : Int, separator : Parser[Token, B]) -> Parser[Token, Array[A]]
fn Parser::repeat_n[Token, A](self : Parser[Token, A], n : Int) -> Parser[Token, Array[A]]
fn Parser::repeat_n_with_sep[Token, A, B](self : Parser[Token, A], n : Int, sep : Parser[Token, B]) -> Parser[Token, Array[A]]
fn Parser::repeat_with_sep[Token, A, B](self : Parser[Token, A], separator : Parser[Token, B]) -> Parser[Token, Array[A]]
fn Parser::run[Token, Value](self : Parser[Token, Value], sequence : Seq[Token]) -> (Value, Seq[Token])?
pub type Seq[T] () -> (T, Seq[T])?
impl Show for Seq[T]
fn output[T : Show](self : Seq[T], log : Logger) -> Unit
fn to_string[T : Show](self : Seq[T]) -> String
fn Seq::default[T]() -> Seq[T]
fn Seq::from_array[T](array : ArrayView[T]) -> Seq[T]
fn Seq::from_list[T](list : @moonbitlang/core/immut/list.TT[T]) -> Seq[T]
fn Seq::from_string(str : String) -> Seq[Char]
fn Seq::is_empty[T](seq : Seq[T]) -> Bool
fn Seq::length[T](self : Seq[T]) -> Int
fn Seq::map[T1, T2](seq : Seq[T1], f : (T1) -> T2) -> Seq[T2]
fn Seq::new[T](f : () -> (T, Seq[T])?) -> Seq[T]
fn Seq::uncons[T](seq : Seq[T]) -> (T, Seq[T])?
fn length[T](self : Seq[T]) -> Int
fn lift2[Token, A, B, C](f : (A, B) -> C) -> ((Parser[Token, A], Parser[Token, B]) -> Parser[Token, C])
fn one_of[A : Show](array : Array[A]) -> Parser[Char, A]
fn pchar(char : Char) -> Parser[Char, Char]
fn pchar_such_that(predicate : (Char) -> Bool) -> Parser[Char, Char]
fn pconst[Token, A](a : A) -> Parser[Token, A]
let pdigit : Parser[Char, Int]
fn pfail[Token, A]() -> Parser[Token, A]
let pint : Parser[Char, Int]
let pint64 : Parser[Char, Int64]
fn pstring(string : String) -> Parser[Char, String]
fn pvalue[Token, Value](predicate : (Token) -> Value?) -> Parser[Token, Value]
fn sequence[Token, A](parsers : Array[Parser[Token, A]]) -> Parser[Token, Array[A]]
Install
Powered by MoonBit
© 2026 mooncakes.io