import { equals as _equals } from '@typed/common' import { Arity1, curry, Is } from '@typed/lambda' /** * Check if two values have value-equality. * @param a :: a * @param b :: a * @returns :: boolean */ export const equals: Equals = curry((a: A, b: A) => _equals(a, b, [], [])) as Equals export type Equals = { (a: A, b: unknown): b is A (a: A): Is } export const equalsBy: { (by: Arity1, a: A, b: A): boolean (by: Arity1, a: A): (b: A) => boolean (by: Arity1): { (a: A, b: A): boolean (a: A): (b: A) => boolean } } = curry((by: Arity1, a: A, b: A): boolean => equals(by(a), by(b)))