pragmatic-fp-ts
Version:
Opinionated functional programming library with easy use in mind
30 lines (26 loc) • 948 B
text/typescript
import { Endomorphism, getValueOr } from "./main.ts";
// Updates array item at index by applying function
export function adjust<A>(idx: number, fn: Endomorphism<A>, coll: A[]): A[];
export function adjust<A>(idx: number, fn: Endomorphism<A>): (coll: A[]) => A[];
export function adjust(
idx: number
): <A>(fn: Endomorphism<A>) => (coll: A[]) => A[];
export function adjust<A>(idx: number, fn?: Endomorphism<A>, coll?: A[]) {
if (arguments.length === 1) {
return function (fn_: Endomorphism<A>, coll_?: A[]) {
return arguments.length === 1
? adjust(idx, fn_)
: adjust(idx, fn_, coll_!);
};
} else if (arguments.length === 2) {
return (_coll: A[]) => adjust(idx, fn!, _coll);
} else {
const input = getValueOr([], coll!);
const output = Array.from(input);
const i = getValueOr(-1, idx!);
if (0 <= i! && i! < input.length) {
output[i] = fn!(input[i]);
}
return output;
}
}