/** @module array/mapArray.ts */
import { times } from '../flow'
import { untypedCurry } from '../function/untypedCurry'
import { Equals } from '../helper-types'
export function mapArray any>( fn: Fn, arr: A[] ): Fn extends ( item: any ) => infer B ? B[] : never
export function mapArray( fn: ( a: A ) => T ): ( arr: A[] ) => T[]
/**
* Maps / applies a function over the items in an array
* @param fn function applied over items in array, must match array item type
* @param arr array to map function over
* @sig ( f -> a -> b ) -> a[] -> b[]
* mapArray( (x: number) => x + 1, [1,2,3])
* //=> [2,3,4]
*/
export function mapArray( ...args ) {
return untypedCurry( ( fn, arr ) => times( ( index ) => fn( arr[ index ] ), arr.length ) )( ...args )
}
export default mapArray