UNPKG

wonka

Version:

A fast push & pull stream library for Reason, loosely following the [callbag spec](https://github.com/callbag/callbag)

58 lines (54 loc) 2.1 kB
'use strict'; var Block = require("bs-platform/lib/js/block.js"); var Curry = require("bs-platform/lib/js/curry.js"); var Wonka_helpers = require("../wonka_helpers.js"); function take(max) { return (function (source) { return (function (sink) { var state = /* record */[ /* taken */0, /* talkback */Wonka_helpers.talkbackPlaceholder ]; Curry._1(source, (function (signal) { if (typeof signal === "number") { if (state[/* taken */0] < max) { state[/* taken */0] = max; return sink(/* End */0); } else { return /* () */0; } } else if (signal.tag) { if (state[/* taken */0] < max) { state[/* taken */0] = state[/* taken */0] + 1 | 0; sink(signal); if (state[/* taken */0] === max) { sink(/* End */0); return state[/* talkback */1](/* Close */1); } else { return 0; } } else { return /* () */0; } } else { state[/* talkback */1] = signal[0]; return /* () */0; } })); return sink(/* Start */Block.__(0, [(function (signal) { if (state[/* taken */0] < max) { if (signal) { state[/* taken */0] = max; return state[/* talkback */1](/* Close */1); } else { return state[/* talkback */1](/* Pull */0); } } else { return 0; } })])); }); }); } exports.take = take; /* No side effect */