fn collection_matches<'a, P, T: 'a>( predicate: &CollectionPredicate<P>, values: impl IntoIterator<Item = &'a T>, matches: impl Fn(&P, &T) -> bool + Copy, ) -> bool