code: @Nonnull
      public <B extends A> ImmutableList<A> patch(int index, int patchLength, @Nonnull ImmutableList<B> replacements) {
          return this.take(index).append(replacements).append(this.drop(index + patchLength));
      }
docs: Patches the current list. Patching a list first takes the first <code>index</code> elements
  then concatenates it with <code>replacements</code> and then concatenates it with the
  original list dropping <code>index + patchLength</code> elements. <p> A visualization of this
  operation is to replace the <code>patchLength</code> elements in the list starting from
  <code>index</code> with a list of new elements given by <code>replacements</code>.
  
  @param index        The index to start patching.
  @param patchLength  The length to patch.
  @param replacements The replacements of the patch.
  @param <B>          The type of the replacements. It must be A or a subtype of A.
  @return The patched list.