/** * Setoid * * 1. a.equals(a) === true (reflexivity) * 2. a.equals(b) === b.equals(a) (symmetry) * 3. If a.equals(b) and b.equals(c), then a.equals(c) (transitivity) * * equals :: Setoid a => a ~> a -> Boolean */ import { HKT, KindOf, URIS } from './HKT'; export interface Setoid { readonly URI: F; readonly equals: (a: HKT, b: HKT) => boolean; } export interface Setoid1 { readonly URI: F; readonly equals: (a: KindOf, b: KindOf) => boolean; } export interface Setoid2 { readonly URI: F; readonly equals: (a: KindOf, b: KindOf) => boolean; }