A stream computation is productive when every demanded finite prefix of its output can be produced in finite work. Filtering an infinite list need not be productive: asking for odd elements of
[0,2..] never produces even an empty-list constructor. Lazy evaluation alone does not prove productivity. New to topics? Read the docs here!