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 !

Made with Slides.com