/** * A join-semilattice (or upper semilattice) is a semilattice whose operation is called `join`, and which can be thought * of as a least upper bound. * * A `JoinSemilattice` must satisfy the following laws: * * - Associativity: `a ∨ (b ∨ c) <-> (a ∨ b) ∨ c` * - Commutativity: `a ∨ b <-> b ∨ a` * - Idempotency: `a ∨ a <-> a` * * @since 2.0.0 */ /** * @category model * @since 2.0.0 */ export interface JoinSemilattice { readonly join: (x: A, y: A) => A }