Пытаюсь сделать библиотечку парсер комбинаторов для того, чтобы парсить JSON.
    public static <R, T> Parser<R, T> oneOf(final Parser<? extends R, T>... parsers) {
        return new Parser<R, T>() {
            @Override
            public ParseResult<R> parse(TokenStream<T> tokenStream) {
                for (Parser<? extends R, T> parser : parsers) {
                    final TokenStream.Marker marker = tokenStream.newMarker();
                    final ParseResult<? extends R> result = parser.parse(tokenStream);
                    if (result.isSuccessful()) {
                        marker.forget();
                        return result; //incompatible types
                                       // found   : ch.abacus.search.client.remote.query.parser.ParseResult<capture#204 of ? extends R>
                                       // required: ch.abacus.search.client.remote.query.parser.ParseResult<R>
                    } else {
                        marker.back();
                    }
                }
                return new ParseResult.Failure<R>("Expected one of");
            }                                                             
        };
    }
public interface Parser<R, T> {
    ParseResult<R> parse(TokenStream<T> tokenStream);
}
public interface ParseResult<R> {
    boolean isSuccessful();
    R getResult();
    String getErrorMessage();
    static class Success<R> implements ParseResult<R> {
...
    }
    static class Failure<R> implements ParseResult<R> {
...
    }
}Как бы сделать, чтоб нормально тайпчекалось?

