import { curry, Is, Predicate } from '@typed/lambda'
/**
* Returns true if either predicates return true.
* @param predicate1 :: (a -> boolean)
* @param predicate2 :: (a -> boolean)
* @param value :: a
* @returns :: boolean
*/
export const or: {
(predicate1: Is, predicate2: Is, value: unknown): value is A | B
(predicate1: Is, predicate2: Is): (value: unknown) => value is A | B
(predicate1: Is): {
(predicate2: Is, value: unknown): value is A | B
(predicate2: Is): Is
}
(predicate1: Predicate, predicate2: Predicate, value: A): boolean
(predicate1: Predicate, predicate2: Predicate): Predicate
(predicate1: Predicate): {
(predicate2: Predicate, value: A): boolean
(predicate2: Predicate): Predicate
}
} = curry(__or) as {
(predicate1: Is, predicate2: Is, value: C): value is A | B
(predicate1: Is, predicate2: Is): (value: C) => value is A | B
(predicate1: Is): {
(predicate2: Is, value: C): value is A | B
(predicate2: Is): (value: C) => value is A | B
}
(predicate1: Predicate, predicate2: Predicate, value: A): boolean
(predicate1: Predicate, predicate2: Predicate): Predicate
(predicate1: Predicate): {
(predicate2: Predicate, value: A): boolean
(predicate2: Predicate): Predicate
}
}
function __or(predicate1: Predicate, predicate2: Predicate, value: A): boolean {
return predicate1(value) || predicate2(value)
}