Extends
Typeclass
Law
Predicate
Equivalence
transitivity
a=b∧b=c⇒a=c
symmetry
a=b⇔b=a
reflexivity
a=a
Order
transitivity
a≤b∧b≤c⇒a≤c
antisymmetry
a≤b∧b≤a⇒a=b
reflexivity
a≤a
connectivity
a≤b∨b≤a
complement consistency
a≤b
⇒
a≯b
Bounded
lower bounded
a≥
minBound
upper bounded
a
≤
maxBound
Semigroup
associativity
(a⊕b)⊕c
=
a⊕(b⊕c)
combineMany associativity
combineMany(a,[b,c])
=
a⊕(b⊕c)
Monoid
left identity
∅⊕a=a
right identity
a⊕∅=a
Invariant
identity
imap(id,id)=id
composition
imap(ab,ba)∘imap(bc,cb)
=
imap(bc∘ab,ba∘cb)
Contravariant
identity
contramap(id)=id
composition
contramap(ba)∘contramap(cb)
=
contramap(ba∘cb)
Covariant
identity
map(id)=id
composition
map(ab)∘map(bc)
=
map(bc∘ab)
Applicative
identity
id▹of▹ap(a)=a
homomorphism
ab▹of▹(a▹of▹ap)
=
a▹ab▹of
associative composition
fbc▹map(compose)▹ap(fab)▹ap(fa)
=
fbc▹ap(fab▹ap(fa))
interchange
fab▹ap(of(a))
=
a▹apply▹of▹ap(fab)
map consistency
fa▹map(ab)
=
ab▹of▹ap(fa)
product consistency
fab▹ap(fa)
=
product(fab,fa)▹map(([ab,a])⇒ab(a))
flatMap consistency
ap(fa)
=
flatMap(ab⇒map(fa,ab))
Monad
left identity
of∘flatMap(afb)
=
afb
right identity
flatMap(of)=id
associativity
flatMap(afb)∘flatMap(bfc)
=
flatMap(flatMap(bfc)∘afb)
map consistency
map(ab)
=
flatMap(of∘ab)
SemiAlternative
associativity
(fa1⊕fa2)⊕fa3
=fa1⊕(fa2⊕fa3)
coproductMany associativity
coproductMany(fa1,[fa2,fa3])
=fa1⊕(fa2⊕fa3)
Alternative
left identity
∅⊕fa=fa
right identity
fa⊕∅
=
fa
coproductAll zero
coproductAll([])
=
∅
right absorption
ap(fab,∅)
=
∅
left distributivity
coproduct(fa1,fa2)▹map(ab)
=
coproduct(map(fa1,ab),map(fa2,ab))
right distributivity
coproduct(fab1,fab2)▹ap(fa)
=
coproduct(ap(fab1,fa),ap(fab2,fa))
Traversable
identity
Id.traverse(id)=id
composition
G.map(H.traverse(bhc))∘G.traverse(agb)
=
GH.traverse(G.map(bhc)∘agb)
map consistency
F.map(ab)
=
Id.traverse(ab)
Foldable
reduce
reduce(b,bab)=combineMap(Monoid<Endo<B>>)(a⇒b⇒bab(b,a))
combineMap
reduce(∅,⊕)=combineMap(monoid)(id)
reduceRight
reduceRight(∅,(p,a)⇒aa(a)⊕p)
=
combineMap(monoid)(aa)
reduceKind
reduceKind(Monad<Id>)
=
reduce
toArray
toArray
=
reduce([],Array.append)
Filterable
identity
filterMap(Option.some)=id
composition
filterMap(boc)∘filterMap(aob)=filterMap(Option.flatMap(boc)∘aob)
🔗tip: Typeclasses and laws link to
their source code.