Tous (les) Ensembles
À l'origine, il y eut le Magma
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
Ça peut très vite devenir un Semi-groupe
Si la loi de composition est
associative
Exemple : (N, +) est un semi-groupe, a + (b + c) = (a + b) + c
Voire même un Monoïde
S'il existe un élément
neutre
Exemple : (N, +) est un monoïde, car 0 est l'élément neutre : 0 + a = a
Et soyons fou, un
Groupe
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
Mais Jamy, c'est quoi une
Monade ?
C'est une boite
Boîte M avec deux fonctions : - unit : a => M a - bind ou flatMap : (a => M b) => M a => M b
Et dans fp-ts ?
- Est-ce que Array est une monade ?
- Est-ce que Array est un monoïde ?
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: []
})
Array
export const SemigroupSum: Semigroup<number> = {
concat: (first, second) => first + second
}
export const MonoidSum: Monoid<number> = {
concat: SemigroupSum.concat,
empty: 0
}
Number
ConcatAll
Semigroup
Monoid
Max
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));
Merci !
Tous (les) Ensemble
By ereold
Tous (les) Ensemble
- 237