+A **product type** (often called a record, struct, or tuple) combines multiple distinct values into a single, cohesive unit. For example, a `Point` might be defined as an `x` coordinate AND a `y` coordinate. All components are present simultaneously.
+A **sum type** (also known as a tagged union or variant) represents a value that can take on one of several different forms. For instance, a `Shape` might be defined as EITHER a `Circle` OR a `Rectangle` OR a `Triangle`. Only one of these forms can be active at any given time, and each form might carry its own specific data.
+ADTs are powerful because they allow developers to model real-world concepts with precision, leading to more expressive, safe, and maintainable code. They ensure that data is always in a valid state and facilitate exhaustive [Pattern Matching](/wiki/pattern_matching), reducing the likelihood of runtime errors.