1.0.0 • Published 7 years ago

fl-generators v1.0.0

Weekly downloads
2
License
MIT
Repository
github
Last release
7 years ago

:fuelpump: fl-generators

fl-generators provides a declarative API for creating generators.

const Iter = require('fl-generators');

tunedPianos = Iter.of(instruments).filter(isPiano).map(tune);

Is equivalent to:

const filter = function*(it, g) {
  for (const x of it()) {
    if (g(x)) {
      yield x;
    }
  }
}

const map = function*(it, g) {
  for (const x of it()) {
    yield g(x);
  }
}

tunedPianos = map(filter(instruments, isPiano), tune);

:warning: Notice

Generators are not optimized in V8 or SpiderMonkey. Using generator functions is significantly slower in most situations.

Iter methods

  • cache
  • concatAll
  • concat
  • cycle
  • do
  • filter
  • flatMap
  • map
  • reduce
  • repeat
  • run
  • scan
  • skip
  • skipWhile
  • slice
  • take
  • takeWhile
  • toArray
  • zip

Examples

const Iter = require('fl-generators');

Iter.range(0, 6)
  .filter(n => n % 2 === 0)
  .map(n => n + 1)
  .flatMap(n => [n - 1, n, n + 1])
  .reduce((x, y) => x + y, 0);

// filter 0
// map 0
// flatMap 1
// filter 1
// filter 2
// map 2
// flatMap 3
// filter 3
// filter 4
// map 4
// flatMap 5
// filter 5
// filter 6
// map 6
// flatMap 7
// reduce 48
Array.from({ length: 7 }, (_, i) => i)
  .filter(n => n % 2 === 0)
  .map(n => n + 1)
  .reduce((c, n) =>  c.concat([n - 1, n, n + 1]), [])
  .reduce((x, y) => x + y, 0);

// filter 0
// filter 1
// filter 2
// filter 3
// filter 4
// filter 5
// filter 6
// map 0
// map 2
// map 4
// map 6
// flatMap 1
// flatMap 3
// flatMap 5
// flatMap 7
// reduce 48
1.0.0

7 years ago