public static @NotNull <A, B, C> NotNullFunction<A, C> composition(final @NotNull NotNullFunction<? super B, ? extends C> f, final @NotNull NotNullFunction<? super A, ? extends B> g) {
    return a -> f.fun(g.fun(a));
  }
public static @NotNull <A, B, C> NotNullFunction<A, C> composition(final @NotNull NotNullFunction<? super B, ? extends C> f, final @NotNull NotNullFunction<? super A, ? extends B> g)