class Result {

  @SuppressWarnings("unchecked")
  @NonNull
  public Result<T> orAttemptGetFrom(
      @NonNull final Supplier<? extends Result<? extends T>> supplier) {
    return value != null ? this : (Result<T>) checkNotNull(supplier.get());
  }

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

}