Validation

Accumulate all errors instead of failing fast

What is Validation?

Validation is like Either, but instead of short-circuiting on the first error, it accumulates all errors. This is perfect for form validation where you want to show users all validation errors at once, not just the first one.

// Either stops at first error:
E.chain(validateEmail) // stops here if error

// Validation collects all errors:
V.map3(validateEmail, validateName, validateAge)
Error accumulation
Applicative
Form validation
vs Either
📋

Accumulate Errors

Collect all validation failures

🔄

No Short-Circuit

Unlike Either, runs all validations

Better UX

Show users all errors at once

📝

Form Validation

Perfect for complex form logic

Validation in Action

❌ Early Exit

function validateForm(data: FormData) {
  if (!data.email) return ['Email required']
  if (!data.name) return ['Name required']
  if (!data.age) return ['Age required']
  return []
}

// Shows only first error

✅ Validation Approach

const validateForm = (data: FormData) =>
  pipe(
    sequenceS(V.Validation)(Apply)({
      email: validateEmail(data.email),
      name: validateName(data.name),
      age: validateAge(data.age)
    })
  )

// Accumulates all errors

Practice Exercises

1

Basic

Learn about basic in fp-ts validation

beginnerStart
2

Accumulate

Learn about accumulate in fp-ts validation

beginnerStart
3

Applicative

Learn about applicative in fp-ts validation

beginnerStart
4

Form

Learn about form in fp-ts validation

intermediateStart
5

Comparison

Learn about comparison in fp-ts validation

intermediateStart
6

Nested

Learn about nested in fp-ts validation

intermediateStart
7

Real World

Learn about real world in fp-ts validation

advancedStart

Why Learn Validation?

Master Validation

Learn the fundamental concepts and patterns that make Validation powerful

💪

7 Exercises

Practice with hands-on exercises from intermediate level

🚀

Production Ready

Apply Validation patterns to build robust, type-safe applications