public static <T, R> CheckedFunction0<R> andThen(CheckedFunction0<T> function,
        CheckedFunction2<T, Throwable, R> handler) {
        return () -> {
            try {
                return handler.apply(function.apply(), null);
            } catch (Throwable throwable) {
                return handler.apply(null, throwable);
            }
        };
    }
@Test
    public void shouldRecoverFromResult() throws Throwable {
        CheckedFunction0<String> callable = () -> "Wrong Result";

        CheckedFunction0<String> callableWithRecovery = VavrCheckedFunctionUtils.andThen(callable, (result, ex) -> {
            if(result.equals("Wrong Result")){
                return "Bla";
            }
            return result;
        });

        String result = callableWithRecovery.apply();

        assertThat(result).isEqualTo("Bla");
    }