class Result {

  @NonNull
  public <U> Result<T> ifNonAbsentFailureBindFrom(@NonNull final Supplier<U> supplier,
      @NonNull final Binder<Throwable, ? super U> binder) {
    if (failure != null && failure != ABSENT_THROWABLE) {
      binder.bind(failure, supplier.get());
    }
    return this;
  }

    Result(@Nullable final T value, @Nullable final Throwable failure);

}