static ItIt> outerProductPairs(Collection lA, Collection lB) { ret nestedIterator(lA, func(A a) -> Iterator> { mapI(lB, b -> pair(a, b)) }); } static ItIt> outerProductPairs(Collection lA) { ret outerProductPairs(lA, lA); }