/** @module array/insert.ts */ import { untypedCurry } from '../function/untypedCurry' interface PushIndexPossibleCurried { ( arr: A[], value: B ): Array ( arr: A[] ): ( value: B ) => Array } export function insert( index: number, arr: A[], value: B ): Array export function insert( index: number, arr: A[] ): ( value: B ) => Array export function insert( index: number ): PushIndexPossibleCurried /** * Insert/push a value into an array at given index * * @param index index of array to insert value * @param arr array to insert value at index into * @param value value to insert into array * @example * insert( 2 , [1,2,3,4] ) * //=> [1,2,2,3,4] */ export function insert( ...args ) { return untypedCurry( ( index, arr, value ) => [ ...arr.slice( 0, index ), value, ...arr.slice( index, arr.length ) ] )( ...args ) }