@Contract("_ -> new")
  static @NotNull <T> ImmutableList<T> singleton(T element) {
    return new Singleton<>(element);
  }
@Contract("_ -> new")
  static @NotNull <T> ImmutableList<T> singleton(T element)