   
   /// **Mechanica**
   ///
-  /// Removes all the elements that matches the given `condition` and returns all the removed element (if any).
+  /// Removes all the elements that matches the given `predicate` and returns all the removed element (if any).
+  /// - Parameters:
+  ///   - predicate: A closure that takes an element of the sequence as its argument and returns a Boolean value indicating whether the element is a match.
   @discardableResult
   internal mutating func removeAll(where predicate: (Iterator.Element) -> Bool) -> [Iterator.Element] {
     var removedElements: [Iterator.Element]  = []
-    for index in stride(from: self.endIndex-1, through: 0, by: -1) {
-      let element = self[index]
+    for idx in stride(from: self.endIndex-1, through: 0, by: -1) {
+      let element = self[idx]
       guard predicate(element) else { continue }
-      remove(at: index)
+      remove(at: idx)
       removedElements.insert(element, at: 0)
     }
     return removedElements

}

extension Collection where Self.Index == Int, Iterator.Element: Equatable {
  
  /// **Mechanica**
  ///  Returns the last index where the specified value appears in the collection.
  ///  After using lastIndex(of:) to find the last position of a particular element in a collection, you can use it to access the element by subscripting.
  /// - Parameter element: The element to find the last Index
  internal func lastIndex(of element: Iterator.Element) -> Self.Index? {
    if let idx = reversed().index(of: element) {
      return (endIndex-1) - idx
    }
    return nil
  }

  
  /// **Mechanica**
  ///
  /// Removes the first element that matches the given `predicate` and returns a `new` collection.
  /// - Parameters:
  ///   - predicate: A closure that takes an element of the sequence as its argument and returns a Boolean value indicating whether the element is a match.
  internal func removingFirst(where predicate: (Iterator.Element) -> Bool) -> Self {
    var items = self
    items.removeFirst(where: predicate)
