What role does the where clause play in this generic function?func overlap<C1: Collection, C2: Collection>( _ a: C1, _ b: C2 ) -> [C1.Element] where C1.Element == C2.Element, C1.Element: Equatable { a.filter { b.contains($0) } }