 
 public extension RandomAccessCollection where Indices.SubSequence.Iterator.Element == Index, Indices.Index == Index, Iterator.Element : Equatable {
     
-    /// Returns first position of `pattern` appear in `self`, or `nil` if not match.
+    /// Returns first range of `pattern` appear in `self`, or `nil` if not match.
     ///
     /// - complexity: Amortized O(`self.count`)
-    func match<C : BidirectionalCollection>(with pattern: C) -> Index? where C.Iterator.Element == Iterator.Element {
-        return self.match(with: pattern, by: ==)
+    func range<C : BidirectionalCollection>(of pattern: C) -> Range<Index>? where C.Iterator.Element == Iterator.Element {
+        return self.range(of: pattern, where: ==)
     }
 }
 


public extension RandomAccessCollection where Indices.SubSequence.Iterator.Element == Index, Indices.Index == Index {
    
    /// Returns first position of `pattern` appear in `self`, or `nil` if not match.
    ///
    /// - complexity: Amortized O(`self.count`)
    func match<C : BidirectionalCollection>(with pattern: C, by isEquivalent: (Iterator.Element, Iterator.Element) throws -> Bool) rethrows -> Index? where C.Iterator.Element == Iterator.Element {
        
        let pattern_count: IndexDistance = numericCast(pattern.count)
        if count < pattern_count {

            }
        }
        if try self.reversed().starts(with: reverse_pattern, by: isEquivalent) {
            let strat = self.index(endIndex, offsetBy: -pattern_count)
            return strat..<endIndex
        }
        return nil
    }
