How does Scala's pattern matching relate to algebraic data types (ADTs)?
Answer
Algebraic Data Types (ADTs) are a type system feature for modeling data with a fixed set of cases. Scala implements ADTs using sealed traits + case classes: sealed trait Expr; case class Num(n: Int) extends Expr; case class Add(l: Expr, r: Expr) extends Expr; case class Mul(l: Expr, r: Expr) extends Expr. Pattern matching deconstructs ADTs: def eval(e: Expr): Int = e match { case Num(n) => n; case Add(l, r) => eval(l) + eval(r); case Mul(l, r) => eval(l) * eval(r) }. The sealed keyword enables exhaustiveness checking — the compiler warns if a case is unhandled. This is the expression problem solved for closed sets of types. In Scala 3, the enum keyword provides first-class ADT support: enum Expr { case Num(n: Int); case Add(l: Expr, r: Expr) }. ADTs + pattern matching enable building interpreters, domain models, and state machines that are correct by construction.
Previous
What is opaque type alias in Scala 3?
Next
What are Scala's inline and transparent inline features in Scala 3?