code: public static <W extends WitnessType<W>,U,ST, R> Function<EitherT<W,ST,U>, EitherT<W,ST,R>> lift(final Function<? super U, ? extends R> fn) {
          return optTu -> optTu.map(input -> fn.apply(input));
      }
docs: Lift a function into one that accepts and returns an MaybeWT
  This allows multiple monad types to add functionality to existing function and methods
  
  e.g. to add list handling  / iteration (via Maybe) and iteration (via Stream) to an existing function
  <pre>
  {@code
  Function<Integer,Integer> add2 = i -> i+2;
  Function<MaybeWT<Integer>, MaybeWT<Integer>> optTAdd2 = MaybeWT.lift(add2);
  
  Stream<Integer> withNulls = Stream.of(1,2,3);
  AnyMSeq<Integer> stream = AnyM.fromStream(withNulls);
  AnyMSeq<Maybe<Integer>> streamOpt = stream.map(Maybe::completedMaybe);
  List<Integer> results = optTAdd2.applyHKT(MaybeWT.of(streamOpt))
  .unwrap()
  .<Stream<Maybe<Integer>>>unwrap()
  .map(Maybe::join)
  .collect(CyclopsCollectors.toList());
  
  
  Maybe.completedMaybe(List[3,4]);
  
  
  }</pre>
  
  
  @param fn Function to enhance with functionality from Maybe and another monad type
  @return Function that accepts and returns an MaybeWT