 extension RangeReplaceableCollection where Self.Index == Int, Iterator.Element: Equatable {
   
   /// **Mechanica**
-  /// Removes and returns the specified element from the array (if exists).
-  internal mutating func remove(_ element: Iterator.Element) -> Iterator.Element? {
+  /// Removes the first specified element from the collection (if exists).
+  /// - Returns: The element removed (if any).
+  /// - Parameter element: The element to remove the last occurrence.
+  @discardableResult
+  internal mutating func removeFirstOccurrence(of element: Iterator.Element) -> Iterator.Element? {
     guard let idx = index(of: element) else { return nil }
     return remove(at: idx)
   }
-  
-  // TODO: removeFirstOccurrence
-  
+
   /// **Mechanica**
-  /// Removes the last occurrence where the specified value appears in the collection.
-  /// - Returns: True if the last occurrence element was found and removed or false if not.
-  /// - Parameter element: The element to remove the last occurrence.
+  ///
+  /// Removes the last specified element from the array (if exists).
+  /// - Returns: The element removed (if any).
+  /// - Parameter element: The element to remove the collection occurrence.
   @discardableResult
   internal mutating func removeLastOccurrence(of element: Iterator.Element) -> Iterator.Element? {
-    if let index = lastIndex(of: element) {
-      return remove(at: index)
+    if let idx = lastIndex(of: element) {
+      return remove(at: idx)
     }
     return nil
   }

  
  /// **Mechanica**
  ///
  /// Removes the last element that matches the given `condition`.
  @discardableResult
  internal mutating func removeLast(where predicate: (Iterator.Element) -> Bool) -> Iterator.Element? {
    guard let idx = reversed().index(where: predicate) else { return nil }
    return remove(at: (endIndex-1) - idx)
  }
  
  /// **Mechanica**
  ///
  /// Removes the last element that matches the given `condition` and returns a `new` collection.
  internal func removingLast(where predicate: (Iterator.Element) -> Bool) -> Self {
    var items = self
    items.removeLast(where: predicate)

  
  /// **Mechanica**
  ///
  /// 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 idx in stride(from: self.endIndex-1, through: 0, by: -1) {
      let element = self[idx]
      guard predicate(element) else { continue }
      remove(at: idx)
      removedElements.insert(element, at: 0)
    }
    return removedElements
