         set {
             value[bounds] = newValue
             let first = bounds.lowerBound
-            updates.send([Update(.insert, Array(first..<first + newValue.count)),
-                          Update(.delete, Array(bounds.lowerBound..<bounds.upperBound))])
+            updates.send([ArrayUpdate(.insert, Array(first..<first + newValue.count)),
+                          ArrayUpdate(.delete, Array(bounds.lowerBound..<bounds.upperBound))])
         }
     }
 
     // Insertions
     public func insert(_ newElement: T, at i: Index) {
         value.insert(newElement, at: i)
-        updates.send([Update(.insert, [i])])
+        updates.send([ArrayUpdate(.insert, [i])])
     }
 
     public func insert<C>(contentsOf newElements: C, at i: Int) where C : Collection, T == C.Element {

            }
        }

        var updates: [Update] = []
        if !replacements.isEmpty {
            updates.append(Update(.replace, replacements))
        }
        if !insertions.isEmpty {
            updates.append(Update(.insert, insertions))
        }
        if !deletions.isEmpty {
            updates.append(Update(.delete, deletions))
        }

        value = new

        set {
            value[index] = newValue
            if index == value.count {
                updates.send([ArrayUpdate(.insert, [index])])
            } else {
                updates.send([ArrayUpdate(.replace, [index])])
            }
        }
    }
