1.0.0 • Published 7 years ago
fl-generators v1.0.0
: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.
- v8-users - Is there intent to allow optimization of generator functions?
- wingolog - generators in firefox now twenty-two times faster
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