@Override
	public ParseResult<T, A> parse(LList<T> tokens) {
		ParseResult<T,A> r = this.parser.parse(tokens);
		if(!r.isSuccess()) {
			// parser failed -> fail
			return r;
		} else if(this.pred.apply(r.getValue())) {
			// result is present and predicate passes -> pass
			return r;
		} else {
			// result is present but predicate fails -> fail
			return ParseResult.failure("'check' failed", tokens);
		}
	}