code: @SuppressWarnings("unchecked")
      public final <S extends T> Try<T, A> catching(Class<S> throwableType, Function<? super S, ? extends A> recoveryFn) {
          return catching(throwableType::isInstance, t -> recoveryFn.apply((S) t));
      }
docs: Catch any instance of <code>throwableType</code> and map it to a success value.
  
  @param throwableType the {@link Throwable} (sub)type to be caught
  @param recoveryFn    the function mapping the {@link Throwable} to the result
  @param <S>           the {@link Throwable} (sub)type
  @return a new {@link Try} instance around either the original successful result or the mapped result