laws overview

Added in v0.1.0


Table of contents


utils

applicative

Signature

export declare const applicative: {
  identity: <F, A>(F: Applicative<F>, S: Eq<HKT<F, A>>) => (fa: HKT<F, A>) => boolean
  homomorphism: <F, A, B>(F: Applicative<F>, S: Eq<HKT<F, B>>, ab: FunctionN<[A], B>) => (a: A) => boolean
  interchange: <F, A, B>(F: Applicative<F>, S: Eq<HKT<F, B>>) => (a: A, fab: HKT<F, FunctionN<[A], B>>) => boolean
  derivedMap: <F, A, B>(F: Applicative<F>, S: Eq<HKT<F, B>>, ab: FunctionN<[A], B>) => (fa: HKT<F, A>) => boolean
}

Added in v0.1.0

apply

Signature

export declare const apply: {
  associativeComposition: <F, A, B, C>(
    F: Apply<F>,
    S: Eq<HKT<F, C>>
  ) => (fa: HKT<F, A>, fab: HKT<F, FunctionN<[A], B>>, fbc: HKT<F, FunctionN<[B], C>>) => boolean
}

Added in v0.1.0

chain

Signature

export declare const chain: {
  associativity: <F, A, B, C>(
    F: Chain<F>,
    S: Eq<HKT<F, C>>,
    afb: FunctionN<[A], HKT<F, B>>,
    bfc: FunctionN<[B], HKT<F, C>>
  ) => (fa: HKT<F, A>) => boolean
  derivedAp: <F, A, B>(F: Chain<F>, S: Eq<HKT<F, B>>, fab: HKT<F, FunctionN<[A], B>>) => (fa: HKT<F, A>) => boolean
}

Added in v0.1.0

eq

Signature

export declare const eq: {
  reflexivity: <A>(E: Eq<A>) => (a: A) => boolean
  simmetry: <A>(E: Eq<A>) => (a: A, b: A) => boolean
  transitivity: <A>(E: Eq<A>) => (a: A, b: A, c: A) => boolean
}

Added in v0.1.0

field

Signature

export declare const field: {
  commutativity: <A>(F: Field<A>, S: Eq<A>) => (a: A, b: A) => boolean
  integralDomain: <A>(F: Field<A>, S: Eq<A>) => (a: A, b: A) => boolean
  nonNegativity: <A>(F: Field<A>, S: Eq<A>) => (a: A) => boolean
  quotient: <A>(F: Field<A>, S: Eq<A>) => (a: A, b: A) => boolean
  reminder: <A>(F: Field<A>, S: Eq<A>) => (a: A, b: A) => boolean
  submultiplicative: <A>(F: Field<A>, S: Eq<A>) => (a: A, b: A) => boolean
  inverse: <A>(F: Field<A>, S: Eq<A>) => (a: A) => boolean
}

Added in v0.1.0

functor

Signature

export declare const functor: {
  identity: <F, A>(F: Functor<F>, S: Eq<HKT<F, A>>) => (fa: HKT<F, A>) => boolean
  composition: <F, A, B, C>(
    F: Functor<F>,
    S: Eq<HKT<F, C>>,
    ab: FunctionN<[A], B>,
    bc: FunctionN<[B], C>
  ) => (fa: HKT<F, A>) => boolean
}

Added in v0.1.0

monad

Signature

export declare const monad: {
  leftIdentity: <M, A, B>(M: Monad<M>, S: Eq<HKT<M, B>>, afb: FunctionN<[A], HKT<M, B>>) => (a: A) => boolean
  rightIdentity: <M, A>(M: Monad<M>, S: Eq<HKT<M, A>>) => (fa: HKT<M, A>) => boolean
  derivedMap: <M, A, B>(M: Monad<M>, S: Eq<HKT<M, B>>, ab: FunctionN<[A], B>) => (fa: HKT<M, A>) => boolean
}

Added in v0.1.0

monoid

Signature

export declare const monoid: {
  rightIdentity: <A>(M: Monoid<A>, E: Eq<A>) => (a: A) => boolean
  leftIdentity: <A>(M: Monoid<A>, E: Eq<A>) => (a: A) => boolean
}

Added in v0.1.0

ord

Signature

export declare const ord: {
  totality: <A>(O: Ord<A>) => (a: A, b: A) => boolean
  reflexivity: <A>(O: Ord<A>) => (a: A) => boolean
  antisimmetry: <A>(O: Ord<A>) => (a: A, b: A) => boolean
  transitivity: <A>(O: Ord<A>) => (a: A, b: A, c: A) => boolean
}

Added in v0.1.0

ring

Signature

export declare const ring: { additiveInverse: <A>(R: Ring<A>, E: Eq<A>) => (a: A) => boolean }

Added in v0.1.0

semigroup

Signature

export declare const semigroup: { associativity: <A>(S: Semigroup<A>, E: Eq<A>) => (a: A, b: A, c: A) => boolean }

Added in v0.1.0

semiring

Signature

export declare const semiring: {
  addAssociativity: <A>(S: Semiring<A>, E: Eq<A>) => (a: A, b: A, c: A) => boolean
  addIdentity: <A>(S: Semiring<A>, E: Eq<A>) => (a: A) => boolean
  commutativity: <A>(S: Semiring<A>, E: Eq<A>) => (a: A, b: A) => boolean
  mulAssociativity: <A>(S: Semiring<A>, E: Eq<A>) => (a: A, b: A, c: A) => boolean
  mulIdentity: <A>(S: Semiring<A>, E: Eq<A>) => (a: A) => boolean
  leftDistributivity: <A>(S: Semiring<A>, E: Eq<A>) => (a: A, b: A, c: A) => boolean
  rightDistributivity: <A>(S: Semiring<A>, E: Eq<A>) => (a: A, b: A, c: A) => boolean
  annihilation: <A>(S: Semiring<A>, E: Eq<A>) => (a: A) => boolean
}

Added in v0.1.0