code: public static <A, B, C> Function<A, C> compose(Function<B, C> g, Function<A, ? extends B> f) {
      return new FunctionComposition<>(g, f);
    }
docs: Returns the composition of two functions. For {@code f: A->B} and {@code g: B->C}, composition
  is defined as the function h such that {@code h(a) == g(f(a))} for each {@code a}.
  
  <p><b>Java 8 users:</b> use {@code g.compose(f)} or (probably clearer) {@code f.andThen(g)}
  instead.
  
  @param g the second function to apply
  @param f the first function to apply
  @return the composition of {@code f} and {@code g}
  @see <a href="//en.wikipedia.org/wiki/Function_composition">function composition</a>