"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.bind = exports.tap = exports.chainFirst = void 0; function chainFirst(M) { var tapM = tap(M); return function (f) { return function (first) { return tapM(first, f); }; }; } exports.chainFirst = chainFirst; /** @internal */ function tap(M) { return function (first, f) { return M.chain(first, function (a) { return M.map(f(a), function () { return a; }); }); }; } exports.tap = tap; function bind(M) { return function (name, f) { return function (ma) { return M.chain(ma, function (a) { return M.map(f(a), function (b) { var _a; return Object.assign({}, a, (_a = {}, _a[name] = b, _a)); }); }); }; }; } exports.bind = bind;