src/main/java/isomorphic/Isomorphism.java
default OfInt andThen(OfInt after) {
            requireNonNull(after);
            return OfInt.of(
                    x -> after.applyAsInt(applyAsInt(x)),
                    y -> applyAsInt(after.applyAsInt(y))
            );
        }
/**
         * Returns a composed function that first applies this function to
         * its input, and then applies the {@code after} function to the result.
         *
         * @throws NullPointerException if {@code after} is null
         */
Returns a composed function that first applies this function to
its input, and then applies the  after function to the result.

@throws NullPointerException if  after is null
Returns a composed function that first applies this function to its input and then applies the after function to the result . @throws NullPointerException if after is null
default OfInt andThen(OfInt after) {
            requireNonNull(after);
            return OfInt.of(
                    x -> after.applyAsInt(applyAsInt(x)),
                    y -> applyAsInt(after.applyAsInt(y))
            );
        }
default OfInt andThen ( OfInt after ) { requireNonNull ( after ) ; return OfInt . of ( x -> after . applyAsInt ( applyAsInt ( x ) ) , y -> applyAsInt ( after . applyAsInt ( y ) ) ) ; }
Returns a composed function that first applies this function to
 its input, and then applies the {@code after} function to the result.
Returns a composed function that first applies this function to its input and then applies the { @code after } function to the result .