Should we memoize this? Also, lazy is a ruby 2.x feature. We need to support 1.9.3. So, maybe what is better to return here is an enumerator or something?