@Contract(pure=true)
  public static <T> T @NotNull [] prepend(T element, T @NotNull [] src, @NotNull ArrayFactory<? extends T> factory) {
    int length = src.length;
    T[] result = factory.create(length + 1);
    System.arraycopy(src, 0, result, 1, length);
    result[0] = element;
    return result;
  }
@Contract(pure=true)
  public static <T> T @NotNull [] prepend(T element, T @NotNull [] src, @NotNull ArrayFactory<? extends T> factory)