readme.js
November 7, 2018 ยท View on GitHub
/**
- callbag-pipe
-
- Utility function for plugging callbags together in chain. This utility
- actually doesn't rely on Callbag specifics, and is really similar to
- Ramda's
pipeor lodash'sflow. - Implementation of
callbag-pipeusingR.pipecould look like this: - const pipe = (source, ...cbs) => R.pipe(...cbs)(source)
- This exists to play nicely with the ecosystem,
- and to facilitate the import of the function.
npm install callbag-pipe- Example:
- Create a source with
pipe, then pass it to aforEach: -
const interval = require('callbag-interval'); -
const forEach = require('callbag-for-each'); -
const combine = require('callbag-combine'); -
const pipe = require('callbag-pipe'); -
const take = require('callbag-take'); -
const map = require('callbag-map'); -
const source = pipe( -
combine(interval(100), interval(350)), -
map(([x, y]) => `X${x},Y${y}`), -
take(10) -
); -
forEach(x => console.log(x))(source); // X2,Y0 -
// X3,Y0 -
// X4,Y0 -
// X5,Y0 -
// X6,Y0 -
// X6,Y1 -
// X7,Y1 -
// X8,Y1 -
// X9,Y1 -
// X9,Y2 - Or use
pipeto go all the way from source to sink: -
const interval = require('callbag-interval'); -
const forEach = require('callbag-for-each'); -
const combine = require('callbag-combine'); -
const pipe = require('callbag-pipe'); -
const take = require('callbag-take'); -
const map = require('callbag-map'); -
pipe( -
combine(interval(100), interval(350)), -
map(([x, y]) => `X${x},Y${y}`), -
take(10), -
forEach(x => console.log(x)) -
); -
// X2,Y0 -
// X3,Y0 -
// X4,Y0 -
// X5,Y0 -
// X6,Y0 -
// X6,Y1 -
// X7,Y1 -
// X8,Y1 -
// X9,Y1 -
// X9,Y2 - Nesting
-
- To use pipe inside another pipe, you need to give the inner pipe an
- argument, e.g.
s => pipe(s, ...: -
const interval = require('callbag-interval'); -
const forEach = require('callbag-for-each'); -
const combine = require('callbag-combine'); -
const pipe = require('callbag-pipe'); -
const take = require('callbag-take'); -
const map = require('callbag-map'); -
pipe( -
combine(interval(100), interval(350)), -
s => pipe(s, -
map(([x, y]) => `X${x},Y${y}`), -
take(10) -
), -
forEach(x => console.log(x)) -
); - This means you can use pipe to create a new operator:
-
const mapThenTake = (f, amount) => -
s => pipe(s, map(f), take(amount)); -
pipe( -
combine(interval(100), interval(350)), -
mapThenTake(([x, y]) => `X${x},Y${y}`, 10), -
forEach(x => console.log(x)) -
);
*/
function pipe(...cbs) { let res = cbs[0]; for (let i = 1, n = cbs.length; i < n; i++) res = cbsi; return res; }
module.exports = pipe;