Typeclass Laws

Extends Typeclass Law Predicate Equivalence transitivity a=bb=ca=b \, ∧ \, b=ca=ca=c symmetry a=ba=bb=ab=a reflexivity aa==aa Order transitivity abbca≤b ∧ b≤caca≤c antisymmetry abbaa≤b ∧ b≤aa=ba=b reflexivity aaaa connectivity aba≤bbab≤a complement consistency aba≤b aba \ngtr b Bounded lower bounded aa minBound\minBound upper bounded aa maxBound\maxBound Semigroup associativity (ab)c(a ⊕ b) ⊕ c == a(bc)a ⊕ (b ⊕ c) combineMany associativity combineMany(a,[b,c])\combineMany(a, [b, c]) == a(bc)a ⊕ (b ⊕ c) Monoid left identity  ⁣a∅ \! ⊕ a==aa right identity aa ⊕ ∅==aa Invariant identity imap(id,id)\imap\left(\id, \id\right)==id\id composition imap(ab,ba)imap(bc,cb)\imap(ab, ba) \∘ \imap(bc, cb) == imap(bcab,bacb)\imap(bc \∘ ab, ba \∘ cb) Contravariant identity contramap(id)\contramap(\id)==id\id composition contramap(ba)contramap(cb)\contramap(ba) \∘ \contramap(cb) == contramap(bacb)\contramap(ba \∘ cb) Covariant identity map(id)\map(\id)==id\id composition map(ab)map(bc)\map(ab) \∘ \map(bc) == map(bcab)\map(bc \∘ ab) Applicative identity id     ⁣of    ap(a)\id \▹ \of \▹ \ap(a)==aa homomorphism ab     ⁣of    (a     ⁣of    ap)ab \▹ \of \▹ (a \▹ \of \▹ \ap) == a    ab     ⁣ofa \▹ ab \▹ \of associative composition fbc    map(compose)    ap(fab)    ap(fa)\fbc \▹ \map(\compose) \▹ \ap(\fab) \▹ \ap(\fa) == fbc    ap(fab    ap(fa))\fbc \▹ \ap\(\fab \▹ \ap(\fa)\) interchange fab    ap( ⁣of(a))\fab \▹ \ap\(\of(a)\) == a    apply     ⁣of    ap(fab)a \▹ \apply \▹ \of \▹ \ap(\fab) map consistency fa    map(ab)\fa \▹ \map(ab) == ab     ⁣of    ap(fa)ab \▹ \of \▹ \ap(\fa) product consistency fab    ap(fa)\fab \▹ \ap(\fa) == product(fab,fa)    map(([ab,a])ab(a))\product(\fab, \fa) \▹ \map\(([ab, a]) ⇒ ab(a)\) flatMap consistency ap(fa)\ap(\fa) == flatMap(ab ⁣map(fa,ab))\flatMap\(ab ⇒ \!\map(\fa, ab)\) Monad left identity  ⁣offlatMap(afb)\of \∘ \flatMap(\afb) == afb\afb right identity flatMap( ⁣of)\flatMap(\of)==id\id associativity flatMap(afb)flatMap(bfc)\flatMap(\afb) \∘ \flatMap(\bfc) == flatMap(flatMap(bfc)afb)\flatMap\(\flatMap(\bfc) \∘ \afb\) map consistency map(ab)\map(ab) == flatMap( ⁣ofab)\flatMap(\of \∘ ab) SemiAlternative associativity (fa1fa2)fa3(\fa_1 ⊕ \fa_2) ⊕ \fa_3 ==fa1(fa2fa3)\fa_1 ⊕ (\fa_2 ⊕ \fa_3) coproductMany associativity coproductMany(fa1,[fa2,fa3])\coproductMany(\fa_1, [\fa_2, \fa_3]) ==fa1(fa2fa3)\fa_1 ⊕ (\fa_2 ⊕ \fa_3) Alternative left identity fa∅ ⊕ \fa==fa\fa right identity fa\fa ⊕ ∅ == fa\fa coproductAll zero coproductAll  ⁣([])\coproductAll\emptyArray == right absorption ap(fab,)\ap(\fab, ∅) == left distributivity coproduct(fa1,fa2)    map(ab)\coproduct(\fa_1, \fa_2) \▹ \map(ab) == coproduct(map(fa1,ab),map(fa2,ab))\coproduct\(\map(\fa_1, ab), \map(\fa_2, ab)\) right distributivity coproduct(fab1,fab2)    ap(fa)\coproduct(\fab_1, \fab_2) \▹ \ap(\fa) == coproduct(ap(fab1,fa),ap(fab2,fa))\coproduct\(\ap(\fab_1, fa), \ap(\fab_2, fa)\) Traversable identity Id.traverse(id)\Id.\traverse(\id)==id\id composition G.map(H.traverse(bhc))G.traverse(agb)\G.\map\(\H.\traverse(bhc)\)\x \∘ \G.\traverse(agb) == GH.traverse(G.map(bhc)agb)\GH.\traverse\(\G.\map(bhc)\x \∘ agb\) map consistency F.map(ab)\F.\map(ab) == Id.traverse(ab)\Id.\traverse(ab) Foldable reduce reduce(b,bab)\reduce(b, bab)==combineMap(Monoid<Endo<B>>)(abbab(b,a))\combineMap\(\a\Monoid\ofEndo\xx)(a ⇒ b ⇒ \bab(b, a)\) combineMap reduce(,)\reduce(∅, ⊕)==combineMap(monoid)(id)\combineMap(monoid\,)(\id) reduceRight reduceRight(,(p,a)aa(a)p)\reduceRight(∅, (p,a) ⇒ aa(a) ⊕ p) == combineMap(monoid)(aa)\combineMap(monoid\,)(aa) reduceKind reduceKind(Monad<Id>)\reduceKind(\a\Monad\ofId\xx) == reduce\reduce toArray toArray\toArray == reduce([],Array.append)\reduce([\,], \Array\kern-1pt.\append) Filterable identity filterMap(Option.some)\filterMap(\Option.\fn{some})==id\id composition filterMap(boc)filterMap(aob)\filterMap(boc)\x \∘ \filterMap(aob)==filterMap(Option.flatMap(boc)aob)\filterMap\(\x\Option.\flatMap(boc)\x \∘ aob\)
🔗tip: Typeclasses and laws link to their source code.