mirror of
https://github.com/github/semantic.git
synced 2024-11-28 01:47:01 +03:00
Add a delay combinator.
This commit is contained in:
parent
abb63b7c4d
commit
4f1181c51e
@ -40,6 +40,12 @@ public func not<T>(parser: String -> State<T>?)(_ input: String) -> State<String
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Delays evaluation of a parser.
|
||||||
|
public func delay<A>(thunk: () -> String -> State<A>?) -> String -> State<A>? {
|
||||||
|
return { thunk()($0) }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public func parseWhile(predicate: Character -> Bool)(_ input: String) -> State<String>? {
|
public func parseWhile(predicate: Character -> Bool)(_ input: String) -> State<String>? {
|
||||||
return input.characters.count > 0 && predicate(input.characters[input.startIndex])
|
return input.characters.count > 0 && predicate(input.characters[input.startIndex])
|
||||||
? parseWhile(predicate)(input.from(1)).map { State(rest: $0.rest, value: input.to(1) + $0.value) } ?? State(rest: input.from(1), value: input.to(1))
|
? parseWhile(predicate)(input.from(1)).map { State(rest: $0.rest, value: input.to(1) + $0.value) } ?? State(rest: input.from(1), value: input.to(1))
|
||||||
|
Loading…
Reference in New Issue
Block a user