class DeferredResult {

    public <U, V> DeferredResult<V> thenCombine(DeferredResult<? extends U> other,
            BiFunction<? super T, ? super U, ? extends V> fn) {
        return wrap(this.completableFuture.thenCombine(other.toCompletionStage(), fn));
    }

    public  DeferredResult();
    public  DeferredResult(CompletableFuture<T> completableFuture);

}