Monoid

Semigroup with identity - handle empty cases elegantly

What is Monoid?

A Monoid is a Semigroup with an identity element (called empty). This means you can safely reduce empty arrays and have a meaningful default value. Essential for aggregation operations like sum, concatenation, and merging.

// Instead of manual empty checks:
if (arr.length === 0) return 0
return arr.reduce((a, b) => a + b)

// Use Monoid:
const sum = M.concatAll(M.MonoidSum)(arr)
concat + empty
struct
custom monoids
aggregation

Empty Value

Identity element for safe defaults

Safe Aggregation

Handle empty arrays gracefully

Concat + Empty

Semigroup with a neutral element

🌐

Universal

Works with any combinable type

Monoid in Action

❌ Manual Reduction

function sum(numbers: number[]): number {
  if (numbers.length === 0) return 0
  return numbers.reduce((a, b) => a + b)
}

// Manual empty case handling

✅ Monoid Approach

const sum = M.concatAll(M.MonoidSum)

sum([1, 2, 3]) // 6
sum([]) // 0 (uses empty value)

// Handles empty automatically

Practice Exercises

1

Basic

Learn about basic in fp-ts monoid

beginnerStart
2

Struct

Learn about struct in fp-ts monoid

beginnerStart
3

Custom

Learn about custom in fp-ts monoid

beginnerStart
4

Practical

Learn about practical in fp-ts monoid

intermediateStart

Why Learn Monoid?

Master Monoid

Learn the fundamental concepts and patterns that make Monoid powerful

💪

4 Exercises

Practice with hands-on exercises from intermediate level

🚀

Production Ready

Apply Monoid patterns to build robust, type-safe applications