Thanks for the benchmarks.
The reason this happens is because our list comprehensions consider
everything in filters except false or nil to be true.
So this additional check costs us a bit. We could certainly optimize this
though, since operators (like < and >) and other BIFs are known to return
just booleans, allowing us to skip this check, I just haven't got to this
optimization stage (it surprises me that this check is causing all this