public static <M,A>ListT<M,A> cons(Applicative<M> applicative,Supplier<A> supHead,Supplier<ListT<M,A>> supTail){
  return new ListT<>(applicative.pure(yield(supHead.get(),supTail)));
}

public static < M , A > ListT < M , A > cons ( Applicative < M > applicative , Supplier < A > supHead , Supplier < ListT < M , A > > supTail ) { return new ListT < > ( applicative . pure ( yield ( supHead . get ( ) , supTail ) ) ) ; }
constructs a list in a lazy fashion from head and tail
