we introduce a Filter, but here we use a predicate. Why the proliferation of types?