thi-ng/umbrella

View on GitHub
packages/transducers/src/internal/mathop.ts

Summary

Maintainability
A
0 mins
Test Coverage
import type { FnAny } from "@thi.ng/api";
import type { Reducer, ReductionFn } from "../api.js";
import { $$reduce, reducer } from "../reduce.js";

/**
 * Higher-order reducer for math operations.
 *
 * @param rfn -
 * @param fn -
 * @param initDefault -
 * @param args -
 *
 * @internal
 */
export const __mathop = (
    rfn: FnAny<Reducer<number, number>>,
    fn: ReductionFn<number, number>,
    initDefault: number,
    args: any[]
) => {
    const res = $$reduce(rfn, args);
    if (res !== undefined) return res;
    const init = args[0] || initDefault;
    return reducer(() => init, fn);
};