code: private static <K, V> HamtPMap<K, V> deleteRoot(int mask, HamtPMap<K, V>[] children) {
      if (mask == 0) {
        return null;
      }
      HamtPMap<K, V> child = children[0];
      int hashBits = Integer.numberOfTrailingZeros(mask);
      int newHash = unshift(child.hash, hashBits);
      HamtPMap<K, V> newChild = deleteRoot(child.mask, child.children);
      if (newChild == null) {
        int newMask = mask & ~Integer.lowestOneBit(mask);
        return new HamtPMap<>(child.key, newHash, child.value, newMask, deleteChild(children, 0));
      } else {
        return new HamtPMap<>(
            child.key, newHash, child.value, mask, replaceChild(children, 0, newChild));
      }
    }
docs: Returns a new map with the elements from children. One element is removed from one of the
  children and promoted to a root node. If there are no children, returns null.