Background I’m working on Next Generation Shell. It’s a language specifically designed for Ops. https://github.com/ngs-lang/ngs The language makes heavy use of multiple dispatch. The idea here is guess-ability: you know a relatively small set of verbs (method names) and when you need to do an operation on an unfamiliar object, chances are you can guess the right method name and it will just work. Multiple dispatch also helps with code reuse. I’m trying to keep number of method names small. Dilemma I have the “classical” filter(collection, predicate) and reject(collection, predicate) to filter collections. At some point I have added without(collection, element) which was equivalent of reject(collection, F(elt) elt == element). After a while, I have modified all the methods that take a predicate parameters to take not only functions but other types too. Not going into details of that but it made it possible to write reject([1,2,3], 2), which would work. On one hand I could now remove the redundant without() and hence keep the language smaller and simpler. On the other hand, mynumbers.without(7) reads so much more natural than mynumbers.reject(7). Question Should I keep without() or get rid of it? Any other alternatives?