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
JavaScript
;
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 */