code: public <X1> F1<X1, R>
          compose(final Function<? super X1, ? extends P1> before) {
              final F1<P1, R> me = this;
              return new F1<X1, R>() {
                  @Override
                  public R apply(X1 x1) {
                      return me.apply(before.apply(x1));
                  }
              };
          }
docs: Returns an {@code F1&lt;X1, R&gt;>} function by composing the specified
  {@code Function&ltX1, P1&gt;} function with this function applied last
  
  @param before
  the function to be applied first when applying the return function
  @param <X1>
  type of argument takes by the {@code before} function
  @return an new function such that f(a) == apply(f1(a))