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