From pragmatic standpoint that is not an issue that people are facing today, neither their is any indication that it is affecting design of mainstream languages now. The point of using list.filter { it.isGood() }
is to replace imperative code with declarative, functional one — thinking more about what you want to get, as opposed to how exactly you want to get, and avoid writing the same imperative boilerplate over and over again. In practice, most of the functions in a well-designed modern code are pure anyway, but you can take a look a language popularity charts again to confirm that nobody is jumping to enforce 100% purity.