UNPKG

fp-ts

Version:

Functional programming in TypeScript

33 lines (32 loc) 1.43 kB
/** * A `Foldable` with an additional index. * A `FoldableWithIndex` instance must be compatible with its `Foldable` instance * * ```ts * reduce(fa, b, f) = reduceWithIndex(fa, b, (_, b, a) => f(b, a)) * foldMap(M)(fa, f) = foldMapWithIndex(M)(fa, (_, a) => f(a)) * reduceRight(fa, b, f) = reduceRightWithIndex(fa, b, (_, a, b) => f(a, b)) * ``` * * @since 2.0.0 */ import { getFoldableComposition } from './Foldable'; export function getFoldableWithIndexComposition(F, G) { var FC = getFoldableComposition(F, G); return { reduce: FC.reduce, foldMap: FC.foldMap, reduceRight: FC.reduceRight, reduceWithIndex: function (fga, b, f) { return F.reduceWithIndex(fga, b, function (fi, b, ga) { return G.reduceWithIndex(ga, b, function (gi, b, a) { return f([fi, gi], b, a); }); }); }, foldMapWithIndex: function (M) { var foldMapWithIndexF = F.foldMapWithIndex(M); var foldMapWithIndexG = G.foldMapWithIndex(M); return function (fga, f) { return foldMapWithIndexF(fga, function (fi, ga) { return foldMapWithIndexG(ga, function (gi, a) { return f([fi, gi], a); }); }); }; }, reduceRightWithIndex: function (fga, b, f) { return F.reduceRightWithIndex(fga, b, function (fi, ga, b) { return G.reduceRightWithIndex(ga, b, function (gi, a, b) { return f([fi, gi], a, b); }); }); } }; }