aboutsummaryrefslogtreecommitdiff
path: root/src/parcom.cr
diff options
context:
space:
mode:
Diffstat (limited to 'src/parcom.cr')
-rw-r--r--src/parcom.cr13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/parcom.cr b/src/parcom.cr
index de88a31..14d2e44 100644
--- a/src/parcom.cr
+++ b/src/parcom.cr
@@ -140,22 +140,19 @@ module Parcom
end
end
- # TODO: allow/change to support block invocation
- class Satisfy(T) < Parser(T, T)
- def initialize(@f : T -> Bool)
- end
-
- def parse(tokens : TokenStream(T)) : Result(T, T)
- AnyToken(T).new.assert(@f).parse(tokens)
+ class Satisfy(T) < Assert(T, T)
+ def initialize(&block : T -> Bool)
+ super(AnyToken(T).new, &block)
end
end
class Token(T) < Parser(T, T)
def initialize(@expected : T)
+ @p = Satisfy(T).new { |x| x == @expected }
end
def parse(tokens : TokenStream(T)) : Result(T, T)
- Satisfy(T).new(->(x : T) { x == @expected }).parse(tokens)
+ @p.parse(tokens)
end
end