Iterator::skip: method(n) { n.times { this { break; } } } Iterator::window: method(start, length) { this.skip(start); return this.take(length); } only_uniq: fun(arr) fiber { len: arr.length; iters: range(0, len).map(|i| arr.cycle.window(i, len).to_a); iters {|it,rest| if (rest.select(|e| e == it).to_a.empty) { yield it; } } } only_uniq([3, 1, 4, 1, 5, 9, 2, 6, 5]).to_a.p;