code: public static <T1, T2, T3, R> TriFunction<T1, T2, T3, R> memoize(final TriFunction<T1, T2, T3, R> threeFunc) {
      final Function<T1, Function<T2, Function<T3, R>>> transformed
          = Memoizer.memoize(x -> Memoizer.memoize(y -> Memoizer.memoize(z -> threeFunc.apply(x, y, z))));
      return Transformations
          .<T1, T2, T3, R>unCurryTriFunction()
          .apply(transformed);
  //    return (x, y, z) -> transformed.apply(x).apply(y).apply(z);
    }
docs: <p>memoize.</p>
  
  @param threeFunc a {@link org.rapidpm.frp.functions.TriFunction} object.
  @param <T1> a T1 object.
  @param <T2> a T2 object.
  @param <T3> a T3 object.
  @param <R> a R object.
  @return a {@link org.rapidpm.frp.functions.TriFunction} object.