docs: public final IO<A> exceptionally(Function<? super Throwable, ? extends A> recoveryFn) {
          return new IO<A>() {
              @Override
              public A unsafePerformIO() {
                  return Try.trying(IO.this::unsafePerformIO).recover(recoveryFn);
              }
  
              @Override
              public CompletableFuture<A> unsafePerformAsyncIO(Executor executor) {
                  return IO.this.unsafePerformAsyncIO(executor).exceptionally(recoveryFn::apply);
              }
          };
      }