UNPKG

fp-ts

Version:

Functional programming in TypeScript

42 lines (41 loc) 1.78 kB
import { constant } from './function'; export function getFoldableComposition(F, G) { return { reduce: function (fga, b, f) { return F.reduce(fga, b, function (b, ga) { return G.reduce(ga, b, f); }); }, foldMap: function (M) { var foldMapF = F.foldMap(M); var foldMapG = G.foldMap(M); return function (fa, f) { return foldMapF(fa, function (ga) { return foldMapG(ga, f); }); }; }, reduceRight: function (fa, b, f) { return F.reduceRight(fa, b, function (ga, b) { return G.reduceRight(ga, b, f); }); } }; } export function foldM(M, F) { return function (fa, b, f) { return F.reduce(fa, M.of(b), function (mb, a) { return M.chain(mb, function (b) { return f(b, a); }); }); }; } export function reduceM(M, F) { return function (b, f) { return function (fa) { return F.reduce(fa, M.of(b), function (mb, a) { return M.chain(mb, function (b) { return f(b, a); }); }); }; }; } export function intercalate(M, F) { return function (sep, fm) { var go = function (_a, x) { var init = _a.init, acc = _a.acc; return init ? { init: false, acc: x } : { init: false, acc: M.concat(M.concat(acc, sep), x) }; }; return F.reduce(fm, { init: true, acc: M.empty }, go).acc; }; } export function toArray(F) { return function (fa) { // tslint:disable-next-line: readonly-array return F.reduce(fa, [], function (acc, a) { acc.push(a); return acc; }); }; } export function traverse_(M, F) { var applyFirst = function (mu, mb) { return M.ap(M.map(mu, constant), mb); }; var mu = M.of(undefined); return function (fa, f) { return F.reduce(fa, mu, function (mu, a) { return applyFirst(mu, f(a)); }); }; }