use and instead of all for lazy evaluation