1///|
2pub fn[A, B] type Parser[A] (Input) -> (A, Input) raise ParseError
Parser::(x : Parser[A], f : (A) -> Parser[B]) -> Parser[B]
bind(Parser[A]
x : type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter A
A], (A) -> Parser[B]
f : (type parameter A
A) -> type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter B
B]) -> type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter B
B] {
3 fn(Input
input) {
4 let (A
v, Input
rest) = Parser[A]
x(Input
input)
5 (A) -> Parser[B]
f(A
v)(Input
rest)
6 }
7}
8
9///|
10pub fn[A] type Parser[A] (Input) -> (A, Input) raise ParseError
Parser::(x : A) -> Parser[A]
pure(A
x : type parameter A
A) -> type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter A
A] {
11 fn(Input
input) { (A
x, Input
input) }
12}
13
14///|
15pub fn[A, B] type Parser[A] (Input) -> (A, Input) raise ParseError
Parser::(self : Parser[A], f : (A) -> B) -> Parser[B]
map(Parser[A]
self : type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter A
A], (A) -> B
f : (type parameter A
A) -> type parameter B
B) -> type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter B
B] {
16 Parser[A]
self.(x : Parser[A], f : (A) -> Parser[B]) -> Parser[B]
bind(A
x => (x : B) -> Parser[B]
pure((A) -> B
f(A
x)))
17}
18
19///|
20pub fn[A, B] type Parser[A] (Input) -> (A, Input) raise ParseError
Parser::(self : Parser[A], f : (SourcePos, A) -> B) -> Parser[B]
map_srcpos(
21 Parser[A]
self : type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter A
A],
22 (SourcePos, A) -> B
f : (struct SourcePos {
row: Int
col: Int
}
SourcePos, type parameter A
A) -> type parameter B
B
23) -> type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter B
B] {
24 fn(Input
input) {
25 let { Int
row, Int
col, .. } = Input
input
26 let (A
x, Input
input) = Parser[A]
self(Input
input)
27 ((SourcePos, A) -> B
f(struct SourcePos {
row: Int
col: Int
}
SourcePos::{ Int
row, Int
col }, A
x), Input
input)
28 }
29}
30
31///|
32pub fn[A, B] type Parser[A] (Input) -> (A, Input) raise ParseError
Parser::(x : Parser[A], y : Parser[B]) -> Parser[B]
discard_left(Parser[A]
x : type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter A
A], Parser[B]
y : type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter B
B]) -> type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter B
B] {
33 Parser[A]
x.(x : Parser[A], f : (A) -> Parser[B]) -> Parser[B]
bind(_ => Parser[B]
y)
34}
35
36///|
37pub fn[A, B] type Parser[A] (Input) -> (A, Input) raise ParseError
Parser::(x : Parser[A], y : Parser[B]) -> Parser[A]
discard_right(Parser[A]
x : type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter A
A], Parser[B]
y : type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter B
B]) -> type Parser[A] (Input) -> (A, Input) raise ParseError
Parser[type parameter A
A] {
38 Parser[A]
x.(x : Parser[A], f : (A) -> Parser[A]) -> Parser[A]
bind(A
r => Parser[B]
y.(x : Parser[B], f : (B) -> Parser[A]) -> Parser[A]
bind(_ => (x : A) -> Parser[A]
pure(A
r)))
39}
40