Um semigrupo é um conjunto de elementos que possuem uma operação de combinação interna que é associativa. Por exemplo, a adição é uma  operação de semigrupo para os números inteiros.Um semigrupo comutativo é um semigrupo em que a ordem dos elementos na operação de combinação não importa. Por exemplo, a adição é comutativa para os números inteiros, enquanto a multiplicação não é.O pacote haskell-commutative-semigroups fornece uma implementação de semigrupos comutativos em Haskell, uma linguagem de programação funcional.  