   
   func matched<C: Collection>(atStartOf c: C) -> MatchResult<Index, MatchData>
   where C.Index == Index, C.Element == Element
-  // The following requirements go away with upcoming generics features
-  , C.SubSequence : Collection  
   {
     guard let closer = c.first.flatMap({ pairs[$0] }) else {
       return .notFound(resumeAt: nil)


  func matched<C: Collection>(atStartOf c: C) -> MatchResult<Index, MatchData>
  where C.Index == Index, C.Element == Element
  // The following requirements go away with upcoming generics features
  , C.SubSequence : Collection  
  {
    switch matchers.0.matched(atStartOf: c) {
    case .found(let end, let data):

  
  func matched<C: Collection>(atStartOf c: C) -> MatchResult<Index, ()>
  where C.Index == Index, C.Element == Element 
  {
    return c.isEmpty
    ? .notFound(resumeAt: c.endIndex)
