Home Reference Source

src/map.js

import sequence from './sequence';
import some     from './some';

export default function* map(f, ...colls) {
  if (colls.length === 1) {
    for (const x of colls[0]) {
      yield f(x);
    }

  } else {
    const iters = colls.map(sequence);

    for (;;) {
      const nexts = iters.map(iter => iter.next());
      if (nexts.some(next => next.done)) {
        break;
      }

      yield (f(...nexts.map(next => next.value)));
    }
  }
}