import { curry, Predicate } from '@typed/lambda' import { Just, Maybe, Nothing } from '@typed/maybe' export const findIndex: { (predicate: Predicate, iterable: Iterable): Maybe (predicate: Predicate): (iterable: Iterable) => Maybe } = curry(__findIndex) function __findIndex(predicate: Predicate, iterable: Iterable): Maybe { let i = 0 for (const value of iterable) { if (predicate(value)) { return Just.of(i) } i++ } return Nothing }