func Or[T any](
predicates ...Predicate[T],
if len(predicates) < 2 {
panic(fmt.Sprintf("Or requires at least 2 predicates, got %v", len(predicates)))
}
for _, p := range predicates {
switch p := p.(type) {
case *OrImpl[T]:
flattened = appendPredicates(flattened, p.Predicates...)