require "./parser.cr" module Parcom # `AnyToken` is a `Parser` that consumes exactly one token from # the input stream and returns it. # It fails if the input stream is empty. class AnyToken(T) < Parser(T, T) # Parses the first token in the input, fails if the input is empty. def parse(tokens : Tokens(T)) : Result(T, T) if tokens.empty? raise ParserFail.new("AnyToken: input was empty") else Result.new(tokens[1..], tokens[0]) end end end end