map = function* map(callback, ...iterables) {
const iterators = Array.from(iterables, (iter) => iter[Symbol.iterator]());
const n = iterators.length;
while (true) {
const args = Array(iterators.length);
let anydone = 0;
for (let i = 0; i < n; i++) {
const {done, value} = iterators[i].next();
args[i] = value;
anydone |= done; }
if (anydone) break;
yield callback(...args); }}