code: @NotNull
      public Exceptional<T> recoverWith(@NotNull final Function<Throwable, ? extends Exceptional<T>> function) {
          if (throwable == null) return this;
  
          Objects.requireNonNull(function);
          return Objects.requireNonNull(function.apply(throwable));
      }
docs: Returns current {@code Exceptional} if there were no exceptions, otherwise
  returns an {@code Exceptional} produced by {@code function}.
  
  @param function  recovering function
  @return this {@code Exceptional} if there were no exceptions, otherwise
  an {@code Exceptional} produced by recovering function
  @throws NullPointerException if {@code function} or produced result is null
  @since 1.1.2