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