I thought about that, I can't think of a lot of places where this would be useful outside of this function, specifically the ability to re-set the set on the fly. Maybe in an evaluation where you just want to know about a specific item.

Our `ItemSelectors` functions normally use abstract classes which I don't think would work here. Specifically we use the setter to avoid memory churn which requires a named class (if I recall correctly). 

Basically, this issue is that this isn't "fixed" its actually intentionally mutable to avoid having to construct one item selector per inner loop (quite possibly pre-mature optimization, but isn't avoiding make new objects in the loop basically what the two previous comments were about?

When we have a use-case it should be easy to change, so I kind of think Ill wait until then.