fp-ts-fluture
Version:
fp-ts bindings for Fluture
113 lines (112 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @since 0.5.0
*/
var F = require("fluture");
var E = require("fp-ts/lib/Either");
var pipeable_1 = require("fp-ts/lib/pipeable");
/**
* @since 0.5.0
*/
exports.URI = 'Fluture/Future';
/**
* @since 0.6.4
*/
exports.left = F.reject;
/**
* @since 0.6.4
*/
exports.right = F.resolve;
/**
* @since 0.6.4
*/
function leftIO(ma) {
return F.swap(F.attempt(ma));
}
exports.leftIO = leftIO;
/**
* @since 0.6.4
*/
exports.rightIO = F.attempt;
/**
* @since 0.6.4
*/
function leftTask(ma) {
return F.swap(F.attemptP(ma));
}
exports.leftTask = leftTask;
/**
* @since 0.6.4
*/
exports.rightTask = F.attemptP;
/**
* @since 0.6.4
*/
function orElse(onLeft) {
return F.chainRej(onLeft);
}
exports.orElse = orElse;
/**
* @since 0.6.4
*/
function fold(onLeft, onRight) {
return function (ma) { return function () { return F.promise(F.coalesce(onLeft)(onRight)(ma)).then(function (mb) { return mb(); }); }; };
}
exports.fold = fold;
/**
* @since 0.6.4
*/
exports.swap = F.swap;
function futurify(f) {
return function () {
var args = Array.prototype.slice.call(arguments);
return F.node(function (done) {
var cbResolver = function (e, r) { return (e != null ? done(e) : done(null, r)); };
f.apply(null, args.concat(cbResolver));
});
};
}
exports.futurify = futurify;
/**
* @since 0.5.0
*/
exports.future = {
URI: exports.URI,
map: function (fa, f) { return F.map(f)(fa); },
of: F.resolve,
ap: function (fab, fa) { return F.ap(fa)(fab); },
chain: function (fa, f) { return F.chain(f)(fa); },
bimap: function (fea, f, g) { return F.bimap(f)(g)(fea); },
mapLeft: function (fea, f) { return F.mapRej(f)(fea); },
alt: function (fx, f) { return F.alt(f())(fx); },
chainRec: function (a, f) {
return (function recur(a) {
return exports.future.chain(f(a), E.fold(recur, F.resolve));
})(a);
},
throwError: exports.left,
fromTask: F.attemptP,
fromIO: F.attempt
};
/**
* @since 0.6.4
*/
function delay(millis) {
return chain(F.after(millis));
}
exports.delay = delay;
var _a = pipeable_1.pipeable(exports.future), alt = _a.alt, ap = _a.ap, apFirst = _a.apFirst, apSecond = _a.apSecond, bimap = _a.bimap, chain = _a.chain, chainFirst = _a.chainFirst, flatten = _a.flatten, map = _a.map, mapLeft = _a.mapLeft, fromEither = _a.fromEither, fromOption = _a.fromOption, fromPredicate = _a.fromPredicate;
exports.alt = alt;
exports.ap = ap;
exports.apFirst = apFirst;
exports.apSecond = apSecond;
exports.bimap = bimap;
exports.chain = chain;
exports.chainFirst = chainFirst;
exports.flatten = flatten;
exports.map = map;
exports.mapLeft = mapLeft;
exports.fromEither = fromEither;
exports.fromOption = fromOption;
exports.fromPredicate = fromPredicate;