When a domain value must carry several related pieces of information, a product type combines them into one composite value. A tuple groups components positionally, while a record names its fields. Functional domain models commonly use these structures as building blocks for algebraic data types. section 2.1.2
A person as a composite value
PersonName = (String, String) represents a first and last name as a tuple. Person then combines that product with an age field: Person { name :: PersonName, age :: Age }. The result keeps related data together while preserving its domain structure. section 2.1.2
type PersonName = (String, String)
johnDoeName, janeDoeName :: PersonName
johnDoeName = ("John", "Doe")
janeDoeName = ("Jane", "Doe")
Inspect the tuple definition and concrete names that demonstrate a product type built from two components. section 2.1.2

