Parser
build_primitive_parser : (input -> ParseResult(input, a)) -> Parser(input, a)
parse_partial : Parser(input, a), input -> ParseResult(input, a)
parse : Parser(input, a), input, (input -> Bool) -> Try(a, [ParsingFailure(Str), ParsingIncomplete(input)])
fail : Str -> Parser(_, _)
const : a -> Parser(_, a)
alt : Parser(input, a), Parser(input, a) -> Parser(input, a)
apply : Parser(input, a -> b), Parser(input, a) -> Parser(input, b)
one_of : List(Parser(input, a)) -> Parser(input, a)
map : Parser(input, a), (a -> b) -> Parser(input, b)
map2 : Parser(input, a), Parser(input, b), (a, b -> c) -> Parser(input, c)
map3 : Parser(input, a), Parser(input, b), Parser(input, c), (a, b, c -> d) -> Parser(input, d)
flatten : Parser(input, Try(a, Str)) -> Parser(input, a)
lazy : ({ } -> Parser(input, a)) -> Parser(input, a)
maybe : Parser(input, a) -> Parser(input, Try(a, [Nothing]))
many : Parser(input, a) -> Parser(input, List(a))
one_or_more : Parser(input, a) -> Parser(input, List(a))
between : Parser(input, a), Parser(input, open), Parser(input, close) -> Parser(input, a)
sep_by1 : Parser(input, a), Parser(input, sep) -> Parser(input, List(a))
sep_by : Parser(input, a), Parser(input, sep) -> Parser(input, List(a))
ignore : Parser(input, a) -> Parser(input, { })
keep : Parser(input, a -> b), Parser(input, a) -> Parser(input, b)
skip : Parser(input, a), Parser(input, _) -> Parser(input, a)
chomp_until : a -> Parser(List(a), List(a)) where { a.is_eq : a, a -> Bool }
chomp_while : (a -> Bool) -> Parser(List(a), List(a))
ParseResult : Try({ val : a, input : input }, [ParsingFailure(Str)])