import { curry } from '@typed/lambda' /** * Replace a value at a given index * @param index :: int * @param value :: a * @param list :: [a] * @returns :: [a] */ export const update = curry(function update( index: number, value: A, list: ReadonlyArray, ): A[] { const length = list.length const newList = list.slice() if (length === 0 || index < 0 || index >= length) { return newList } newList[index] = value return newList }) as { (index: number, value: A, list: ReadonlyArray): A[] (index: number, value: A): (list: ReadonlyArray) => A[] (index: number): { (value: A, list: ReadonlyArray): A[] (value: A): (list: ReadonlyArray) => A[] } }