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