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[]
}
}