function* integerRange(from, to) {
for (let i = from; i < to; i++) {
yield i;
}
}
function* filter(iter, condidtion) {
for (let v of iter) {
if (condidtion(v)) {
yield v
}
}
}
function* filterPrime(iter) {
let p = iter.next().value
let rest = iter
yield p
for (let v of filterPrime(filter(iter, x => x % p != 0)))
yield v;
}
function sleep(d){
return new Promise(resolve => setTimeout(resolve, d));
}
void async function(){
for(let v of filterPrime(integerRange(2, Infinity))){
await sleep(1000);
console.log(v);
}
}();
console