class DeferredResult {

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

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

}