/**
* The `Eq` type class represents types which support decidable equality.
*
* Instances must satisfy the following laws:
*
* 1. Reflexivity: `E.equals(a, a) === true`
* 2. Symmetry: `E.equals(a, b) === E.equals(b, a)`
* 3. Transitivity: if `E.equals(a, b) === true` and `E.equals(b, c) === true`, then `E.equals(a, c) === true`
*
* @since 2.0.0
*/
import { Contravariant1 } from './Contravariant'
import { Monoid } from './Monoid'
import { ReadonlyRecord } from './ReadonlyRecord'
/**
* @category type classes
* @since 2.0.0
*/
export interface Eq {
readonly equals: (x: A, y: A) => boolean
}
/**
* @category constructors
* @since 2.0.0
*/
export declare function fromEquals(equals: (x: A, y: A) => boolean): Eq
/**
* @category Contravariant
* @since 2.0.0
*/
export declare const contramap: (f: (b: B) => A) => (fa: Eq) => Eq
/**
* @category instances
* @since 2.0.0
*/
export declare const URI = 'Eq'
/**
* @category instances
* @since 2.0.0
*/
export declare type URI = typeof URI
declare module './HKT' {
interface URItoKind {
readonly [URI]: Eq
}
}
/**
* @category instances
* @since 2.5.0
*/
export declare const eqStrict: Eq
/**
* Use `eqStrict` instead
*
* @since 2.0.0
* @deprecated
*/
export declare function strictEqual(a: A, b: A): boolean
/**
* @category instances
* @since 2.0.0
*/
export declare const eqString: Eq
/**
* @category instances
* @since 2.0.0
*/
export declare const eqNumber: Eq
/**
* @category instances
* @since 2.0.0
*/
export declare const eqBoolean: Eq
/**
* @category instances
* @since 2.0.0
*/
export declare function getStructEq>(
eqs: {
[K in keyof O]: Eq
}
): Eq
/**
* Given a tuple of `Eq`s returns a `Eq` for the tuple
*
* @example
* import { getTupleEq, eqString, eqNumber, eqBoolean } from 'fp-ts/Eq'
*
* const E = getTupleEq(eqString, eqNumber, eqBoolean)
* assert.strictEqual(E.equals(['a', 1, true], ['a', 1, true]), true)
* assert.strictEqual(E.equals(['a', 1, true], ['b', 1, true]), false)
* assert.strictEqual(E.equals(['a', 1, true], ['a', 2, true]), false)
* assert.strictEqual(E.equals(['a', 1, true], ['a', 1, false]), false)
*
* @category instances
* @since 2.0.0
*/
export declare function getTupleEq>>(
...eqs: T
): Eq<
{
[K in keyof T]: T[K] extends Eq ? A : never
}
>
/**
* @category instances
* @since 2.0.0
*/
export declare const eqDate: Eq
/**
* @category instances
* @since 2.6.0
*/
export declare function getMonoid(): Monoid>
/**
* @category instances
* @since 2.7.0
*/
export declare const Contravariant: Contravariant1
/**
* @category instances
* @since 2.0.0
*/
export declare const eq: Contravariant1