import { curry } from '@typed/lambda' import { equals } from '@typed/logic' const isZero = equals(0) /** * Remove values from a list at a given index. * @param index :: int * @param amount :: int * @param list :: [a] * @returns :: [a] */ export const remove = curry(function remove( index: number, amount: number, list: ReadonlyArray, ): A[] { const length = list.length if (isZero(amount) || isZero(length) || index >= length) { return list.slice() } if (isZero(index) && amount >= length) { return [] } const newList = Array(length - Math.abs(index) - 1) for (let i = 0; i < index; ++i) { newList[i] = list[i] } for (let i = index + amount; i < length; ++i) { newList[i - amount] = list[i] } return newList }) as { (index: number, amount: number, list: ReadonlyArray): A[] (index: number, amount: number): (list: ReadonlyArray) => A[] (index: number): { (amount: number, list: ReadonlyArray): A[] (amount: number): (list: ReadonlyArray) => A[] } }