UNPKG

@fpjs/overture

Version:
37 lines (36 loc) 1.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.runCallback = exports.recover = exports.error = exports.Callback = void 0; var _base = require("@fpjs/overture/base"); var _functor = require("@fpjs/overture/algebras/functor"); const mkcont = cb => f => done => cb((err, x) => err != null ? done(err) : f(x)(done)); const Callback = cb => ({ '@@type': 'Callback', 'constructor': Callback, '_callback': cb, 'fantasy-land/map': f => Callback(mkcont(cb)(x => done => done(null, f(x)))), 'fantasy-land/ap': ab => Callback(mkcont(cb)(x => (0, _functor.map)((0, _base.rapply)(x))(ab)['_callback'])), 'fantasy-land/chain': f => Callback(mkcont(cb)(x => f(x)['_callback'])) }); exports.Callback = Callback; Callback['fantasy-land/of'] = x => Callback(done => done(null, x)); const runCallback = f => o => { const op = o['_callback']; if (op === undefined) { throw TypeError(`${(0, _base.type)(o)} is not Callback`); } return op(f); }; exports.runCallback = runCallback; const error = e => Callback(done => done(e)); exports.error = error; const recover = f => o => { const cb = o['_callback']; if (cb === undefined) { throw TypeError(`${(0, _base.type)(o)} is not Callback`); } return Callback(done => cb((e, r) => e === null ? done(null, r) : runCallback(done)(f(e)))); }; exports.recover = recover;