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