         }
     }
     
-    fileprivate func computeTableViewChanges<Record>(from s: [Item<Record>], to t: [Item<Record>], identicalItems: ItemComparator<Record>) -> [TableViewChange<Record>] {
+    fileprivate func computeTableViewChanges<Record>(from s: [Item<Record>], to t: [Item<Record>], itemsAreIdentical: ItemComparator<Record>) -> [TableViewChange<Record>] {
         let m = s.count
         let n = t.count
         

    fileprivate func makeFetchAndNotifyChangesFunction<Record, T>(
        controller: FetchedRecordsController<Record>,
        fetchAlongside: @escaping (Database) throws -> T,
        identicalItems: @escaping ItemComparator<Record>,
        recordsWillChange: ((FetchedRecordsController<Record>, _ fetchedAlongside: T) -> ())?,
        tableViewEvent: ((FetchedRecordsController<Record>, Record, TableViewEvent) -> ())?,
        recordsDidChange: ((FetchedRecordsController<Record>, _ fetchedAlongside: T) -> ())?

                    // Look for a matching deletion
                    for (index, otherChange) in changes.enumerated() {
                        guard case .deletion(let oldItem, let oldIndexPath) = otherChange else { continue }
                        guard itemsAreIdentical(oldItem, newItem) else { continue }
                        let rowChanges = changedValues(from: oldItem.row, to: newItem.row)
                        if oldIndexPath == newIndexPath {
                            return (TableViewChange.update(item: newItem, indexPath: oldIndexPath, changes: rowChanges), index)
