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