import { curryN } from "@unboxing/function"; type MapFunc = (item: T, i: number, arr: ArrayLike) => R; interface Map { (fn: MapFunc, arr: ArrayLike): R[]; (fn: MapFunc): (arr: ArrayLike) => R[]; } /** * Creates an array of values by running each element in list through fn. The fn is invoked with three arguments: * (value, index, arr). */ export const map = curryN(2, (fn: MapFunc, arr: ArrayLike = []) => { const len = arr.length; const result = new Array(len); for (let i = 0; i < len; i++) { result[i] = fn(arr[i], i, arr); } return result; }) as Map