Science Knowings: JavaScript Course For Social Media


Monoids: Building Blocks of Composition

From Currying and Function Composition, we dive into Monoids, a powerful concept that extends the idea of composition to data structures.

What are Monoids?

Monoids are algebraic structures with two key properties: a Semigroup operation and an Identity Element.


A Semigroup is an operation that combines two elements of a set to produce another element of the same set. It satisfies the Associativity Property.

Identity Element

An Identity Element is an element that, when combined with any other element of the set, leaves that element unchanged.

Associativity Property

Associativity means that the grouping of operands in a Semigroup operation does not affect the result. (a ⋆ b) ⋆ c = a ⋆ (b ⋆ c)

Identity Laws

Identity Laws state that combining an element with the Identity Element results in the original element. a ⋆ e = a and e ⋆ a = a

Associativity Laws

Associativity Laws formalize the concept of grouping in Semigroup operations. (a ⋆ b) ⋆ c = a ⋆ (b ⋆ c)

Common Monoids

Monoids are found in many data structures and programming constructs. Here are some examples:

Number Monoid

(a, b) → a + b, where 0 is the Identity Element.

String Monoid

(a, b) → a + b, where an empty string is the Identity Element.

Array Monoid

(a, b) → a.concat(b), where an empty array is the Identity Element.

Object Monoid

(a, b) → {...a, ...b}, where an empty object is the Identity Element.

Function Monoid

(a, b) → a.compose(b), where id() (identity function) is the Identity Element.

Optional Monoid

(a, b) → a.or(b), where None (no value) is the Identity Element.

Either Monoid

(a, b) → a.isLeft ? a : b, where Either.right() (no error) is the Identity Element.

Why does Monoid matter?

Monoids provide a powerful foundation for:

Composing Complex Functions

Monoids allow us to combine functions easily, creating more complex functionality.

Simplifying Code

By using Monoids, we can reduce code duplication and improve readability.

Creating Reusable Components

Monoids enable us to build reusable components that can be composed to create complex systems.

Next Topic: Functors

In the next session, we'll delve into Functors, a generalization of Monoids that allows us to work with data in a more structured way. Follow us to stay tuned!