Kind/book/Parser.repeat.kind2
2024-03-01 20:40:31 -03:00

20 lines
437 B
Plaintext

Parser.repeat
: ∀(n: Nat) ∀(A: *) ∀(p: (Parser A))
(Parser (List A))
= λn λA λp
let P = λx (Parser (List A))
let succ = λn.pred
(Parser.bind
A
(List A)
p
λhead
(Parser.bind
(List A)
(List A)
(Parser.repeat n.pred A p)
λtail (Parser.pure (List A) (List.cons A head tail))
)
)
let zero = (Parser.pure (List A) (List.nil A))
(~n P succ zero)