Scalaz is a foundational functional-programming library for Scala that provides type classes, data types, and syntax to write pure, composable code. It implements classic abstractions such as Functor, Applicative, Monad, Monoid, Foldable, and Traverse, along with powerful transformers (ReaderT, StateT, WriterT, OptionT, and more) to structure effects. The library offers rich data structures—\/ (disjunction), Validation, NonEmptyList, IList, and Free—that help model errors, invariants, and interpretable programs. Its type class–oriented design lets you write generic algorithms over capabilities rather than concrete types, improving reuse and testability. Scalaz also contributes optics, equality/ordering abstractions, and lawful instances with property-based tests to ensure algebraic laws hold. While the Scala ecosystem now includes sibling projects, Scalaz remains a deep toolbox for principled FP in Scala and a reference point for category-theory-inspired design on the JVM.
Features
- Type classes for functional abstractions: Functor, Monad, Applicative, etc., generalized beyond what’s in the base library
- Purely functional data structures (immutable collections with functional semantics and performance)
- Support for effectful programming, error-handling, validation patterns etc in functional style
- Law-based abstractions, enabling reasoning about correctness and composability
- Integration / compatibility with Scala build tools and ecosystems (SBT, etc), letting users pick and choose modules (core, concurrent etc.)
- Numerous helper types and utilities: Option//, Either-like constructs, lazy evaluation, monad transformers etc