import { curry } from '@typed/lambda'
import { slice } from '../slice'
/**
* Take values from the start of a list while predicate is true
* @param n :: int
* @param list :: [a]
* @returns :: [a]
*/
export const takeWhile: {
(f: (a: A, i: number) => boolean, list: ArrayLike): A[]
(f: (a: A, i: number) => boolean): (list: ArrayLike) => A[]
} = curry(_takeWhile)
function _takeWhile(f: (a: A, i: number) => boolean, list: ArrayLike): A[] {
const length = list.length
let index = 0
while (index < length && f(list[index], index)) {
index += 1
}
return slice(0, index, list)
}