Solution (source code)

= Solution

The ordinary <list comprehension> exhausts the inner <list> before advancing the outer one. Therefore it enumerates every argument pair when \b[`ys` is finite], or when \b[`xs` has at most one element]. If `ys` is infinite and `xs` has two or more elements, it stays with the first outer element forever and misses every pair with a later outer occurrence. Applying a constant `f` might hide missing pairs as duplicate values; it does not make the enumeration fair.

An empty-result caveat remains when `ys = []` and `xs` is infinite: the literal comprehension traverses infinitely many empty rows and does not return a terminating empty <list>. Its occurrence requirement is vacuous, but its <productivity> as an empty-result computation fails. An explicit empty-input test avoids that particular failure.