Un ensemble avec une
loi de composition interne
Exemple : Ensemble des entiers naturels N (N, +) est un magma, car pour tout a + b = c, c appartient aussi à N
Cette loi est une fonction, souvent appelée concat
Si la loi de composition est
associative
Exemple : (N, +) est un semi-groupe, a + (b + c) = (a + b) + c
S'il existe un élément
neutre
Exemple : (N, +) est un monoïde, car 0 est l'élément neutre : 0 + a = a
S'il existe un élément symétrique ou inverse pour chaque élément
Exemple : (N, +) est un groupe, car a possède toujours l'élément symétrique -a a + -a = 0
C'est une boite
Boîte M avec deux fonctions : - unit : a => M a - bind ou flatMap : (a => M b) => M a => M b
export const getSemigroup = <A = never>(): Semigroup<Array<A>> => ({
concat: (first, second) => first.concat(second)
})
export const getMonoid = <A = never>(): Monoid<Array<A>> => ({
concat: getSemigroup<A>().concat,
empty: []
})
export const SemigroupSum: Semigroup<number> = {
concat: (first, second) => first + second
}
export const MonoidSum: Monoid<number> = {
concat: SemigroupSum.concat,
empty: 0
}
Semigroup
Monoid
Monoid
Monoid
Semigroup
const sumArray = M.concatAll(N.MonoidSum);
const getMaxValue = NEA.concatAll(SG.max(N.Ord));
const AtLeast0 = { ...N.Bounded, bottom: 0 };
const getMaxValue = M.concatAll(M.max(AtLeast0));