EN
PréludeChargé par défaut — aucun import nécessaire.

Semigroup et Monoid — combinaison associative

Synopsis
interface Semigroup a where
(<>) : a -> a -> a

Un type muni d'une opération binaire associative (<>). (++) (ci-dessous) en est un synonyme, conventionnel sur les listes et les chaînes.

Instances : LazyList, List, String
(++) : Semigroup a => a -> a -> a

(++) est un synonyme de (<>) — conventionnel sur les listes et les chaînes, là où le type concret est connu. En code polymorphe, préférer (<>).

interface Semigroup a => Monoid a where
mempty : a

Un semigroupe avec un élément neutre mempty. Lois : mempty <> x == x et x <> mempty == x.

Instances : LazyList, List, String
concat : Monoid m => List m -> m

Concatène une liste de valeurs d'un monoïde : concat [a, b, c] = a <> b <> c, et concat [] = mempty. Fonctionne sur n'importe quel Monoid — listes de listes, listes de chaînes, … — en combinant les éléments dans l'ordre avec (<>), avec mempty comme résultat pour la liste vide. concat ["a", "b", "c"] = "abc" concat [[1], [2, 3]] = [1, 2, 3]