     }
 
     /// Updates the summary cached at `handle` and its ancestors, assuming that all other nodes have up-to-date data.
-    /// - Complexity: O(log(count)) for nonempty summarys, O(1) when the summary is empty.
-    private mutating func updateSummarysAtAndAbove(handle: Handle?) {
+    /// - Complexity: O(log(count)) for nonempty summaries, O(1) when the summary is empty.
+    private mutating func updateSummariesAtAndAbove(handle: Handle?) {
         guard sizeof(Summary.self) > 0 else { return }
         var handle: Handle? = handle
         while let h = handle {

    }

    /// Returns the summary calculated over the sequence all nodes preceding `handle` in the tree.
    /// - Complexity: O(log(count) for nonempty summarys, O(1) when the summary is empty.
    public func summaryOfAllNodesBefore(handle: Handle) -> Summary {
        func summaryOfLeftSubtree(handle: Handle) -> Summary {
            guard sizeof(Summary.self) > 0 else { return Summary() }

        let old = node.head
        node.head = head
        self[handle] = node
        updateSummariesAtAndAbove(handle)
        return old
    }
}
