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) }