import { indexOf as _indexOf } from '@typed/common'
import { curry } from '@typed/lambda'
import { Maybe, Nothing } from '@typed/maybe'
/**
* Find the index of a value
* @param value :: a
* @param list :: [a]
* @returns :: Maybe int
*/
export const indexOf: {
(value: A, list: ArrayLike): Maybe
(value: A): (list: ArrayLike) => Maybe
} = curry(
(value: A, list: ArrayLike): Maybe => {
const index = _indexOf(list, value)
return index > -1 ? Maybe.of(index) : Nothing
},
) as {
(value: A, list: ArrayLike): Maybe
(value: A): (list: ArrayLike) => Maybe
}