         isEqualElement: NestedElementEqualityChecker<T>,
         indexPathTransform: @escaping (IndexPath) -> IndexPath = { $0 },
         sectionTransform: @escaping (Int) -> Int = { $0 },
+        updateData: ((T) -> Void)? = nil,
         completion: ((Bool) -> Swift.Void)? = nil
     )
         where T.Element: Collection,

        newData: T,
        isEqual: EqualityChecker<T>,
        indexPathTransform: @escaping (IndexPath) -> IndexPath = { $0 },
        completion: ((Bool) -> Swift.Void)? = nil
    ) {
        let diff = oldData.extendedDiff(newData, isEqual: isEqual)
        apply(diff, completion: completion, indexPathTransform: indexPathTransform)
    }

    func apply(
        _ diff: ExtendedDiff,
        completion: ((Bool) -> Swift.Void)? = nil,
        indexPathTransform: @escaping (IndexPath) -> IndexPath = { $0 }
    ) {
        performBatchUpdates({
            let update = BatchUpdate(diff: diff, indexPathTransform: indexPathTransform)
            self.deleteItems(at: update.deletions)
            self.insertItems(at: update.insertions)

        T.Element.Element: Equatable {
        self.apply(
            oldData.nestedExtendedDiff(to: newData),
            data: newData,
            indexPathTransform: indexPathTransform,
            sectionTransform: sectionTransform,
            updateData: updateData,
            completion: completion
        )
    }
