UNPKG

effect-ts-laws

Version:
13 lines 863 B
import { addLawSets, Law, lawTests } from '#law'; import { flow, identity, pipe } from 'effect'; import { invariantLaws } from './Invariant.js'; import { unfoldGiven } from './given.js'; /** * Typeclass laws for `Contravariant` and its requirement: `Invariant`. * @category typeclass laws */ export const contravariantLaws = (given, suffix) => { const { F, equalsFa, fa, ba, cb, equalsFc } = unfoldGiven(given); return pipe(lawTests(`Contravariant${suffix ?? ''}`, Law('identity', 'contramap(id) = id', fa)(fa => equalsFa(F.contramap(fa, identity), fa)), Law('composition', 'fa ▹ contramap(ba) ▹ contramap(cb) = fa ▹ contramap(ba ∘ cb)', fa, ba, cb)((fa, ba, cb) => equalsFc(pipe(fa, F.contramap(ba), F.contramap(cb)), pipe(fa, F.contramap(flow(cb, ba)))))), pipe(given, invariantLaws, addLawSets)); }; //# sourceMappingURL=Contravariant.js.map