static IntRange intersectIntRanges(IntRange a, IntRange b) { int start = max(a.start, b.start); int end = min(a.end, b.end); ret start <= end ? IntRange(start, end) : null; } static L intersectIntRanges(Iterable l, IntRange b) { ret map(l, r -> intersectIntRanges(r, b)); }