Skip to Content
🇫🇷 🇪🇺 Looking for experienced guidance on Lean software delivery? We'd be glad to explore how we can work together. Contact →
Advanced Software EngineeringFoundationsMonoids: A Ubiquitous Abstraction

Monoids: A Ubiquitous Abstraction

A monoid is an algebraic structure of disarming simplicity: a set equipped with an associative binary operation and a neutral element. That’s all.

Examples Everywhere

  • Integers with addition and 00
  • Strings with concatenation and ""
  • Lists with concat and []
  • Booleans with && and true, or with || and false
  • Functions AAA \to A with composition and identity

Wherever we look, monoids emerge. This ubiquity is no accident: the monoid captures the minimal pattern of “things that can be combined” without requiring anything more.

Associativity: The Key to Parallelization

Associativity, the central property of monoids, has considerable practical consequences. It guarantees that:

(ab)c=a(bc)(a \bullet b) \bullet c = a \bullet (b \bullet c)

This freedom of parenthesization opens the door to parallelization.

To reduce a list of a thousand elements, we can split it into ten segments, reduce each segment independently on a distinct thread, then combine the intermediate results.

Map-Reduce fundamentally relies on this property: “reduce” is nothing but a distributed monoidal fold. Without associativity, this parallelization would be incorrect.

Monoids in Business Modeling

In business modeling, monoids appear whenever we aggregate or accumulate data:

  • Shopping cart: we combine two carts by merging their items, the empty cart is the neutral element. Recognizing this structure allows using generic, battle-tested operations (merge, combineAll) rather than ad hoc logic prone to subtle bugs.
  • Metrics and statistics: counters we add together, weighted averages we merge, histograms we combine. Reliable dashboards depend on correct aggregations: an error in sales metrics can lead to flawed strategic decisions.
  • Logs and events: temporal concatenation. A coherent audit trail is a regulatory prerequisite (GDPR, SOC2): merging logs from multiple sources must preserve order and completeness.
  • Permissions: we combine access rights from multiple roles, the absence of permission is the neutral element. Ad hoc permission logic is a frequent source of security vulnerabilities; a monoidal structure makes behavior explicit and verifiable.

For a developer, recognizing these structures allows applying generic operations (fold / reduce, mconcat) rather than reinventing combination logic for each domain: less code means fewer bugs, and behaviors that are already proven.

The Neutral Element: Robustness by Default

The neutral element, often overlooked, plays a crucial role in code robustness:

  • It provides a sensible default value when there’s “nothing” to combine: reducing an empty list returns the neutral element rather than raising an exception
  • It allows initializing an accumulator without special cases
  • It simplifies APIs: rather than returning Option<Result> to handle the empty case, we simply return the neutral result

This uniformity eliminates an entire class of bugs related to edge cases—bugs often discovered late in production when a user encounters the “no elements” case for the first time. The monoid transforms absence into trivial presence, eliminating the need for tests and error handling for these scenarios. See also our article on total and partial functions.

The Composability of Monoids

Monoids compose remarkably well, which amplifies their utility:

  • If AA is a monoid and BB is a monoid, then the product (A,B)(A, B) is a monoid with the component-wise operation
  • Functions XMX \to M to a monoid MM themselves form a monoid
  • Map<K, V> where VV is a monoid allows natural merging of entries sharing the same key

This compositionality allows building complex structures from simple bricks, each preserving monoidal properties.

The developer who recognizes a monoid in their domain automatically inherits a rich vocabulary (empty, combine, combineAll) and formal guarantees about the behavior of these operations.

Want to dive deeper into these topics?

We help teams adopt these practices through hands-on consulting and training.

or email us at contact@evryg.com

Last updated on