TODO: needs better documentation.

declare const
arrA: number[],
arrB: number[],
arrC: number[],
arrD: number[],
arrE: number[],
arr: number[]

const
add2_fromindex_HOF: IndexNumericMapFunc<2> = (a1, a2) => (i) => (a1[i] + a2[i]),
poly4_fromindex_HOF: IndexNumericMapFunc<4> = (a1, a2, a3, a4) => (i) => (a1[i] + a2[i] ** (3 / 2) + a3[i] ** (4 / 3) + a4[i] ** (5 / 4)),
add5_fromindex_HOF: IndexNumericMapFunc<5> = (a1, a2, a3, a4, a5) => (i) => (a1[i] + a2[i] + a3[i] + a4[i] + a5[i])

vectorizeIndexHOF(add2_fromindex_HOF, arrC, arrA, arrB)
vectorizeIndexHOF(poly4_fromindex_HOF, arrE, arrA, arrB, arrC, arrD)
vectorizeIndexHOF(add5_fromindex_HOF, arr, arrA, arrB, arrC, arrD, arrE)

the original code's type annotations causes deno_v1.35.3 to crash due to out-of-memory.

this did not happen back in deno_v1.32.1, so I'll leave the original code below. but the actual source code has been dumbed down in order to prevent deno LSP from crashing.

export const vectorizeIndexHOF = <
ParamLength extends number,
A extends NumericArray = any
>(
index_map_func_hof: IndexNumericMapFunc<ParamLength>,
write_to: A,
...input_arrs: ArrayFixedLength<NumericArray, ParamLength>
): void => {
const map_func_index = index_map_func_hof(...input_arrs)
for (let i = 0; i < write_to.length; i++) write_to[i] = map_func_index(i)
}