Product type

An instance of a product type retains the fixed order, but otherwise may contain all possible instances of its primitive data types.

The expression of an instance of a product type will be a tuple, and is called a "tuple type" of expression.

The notion directly extends to the product of an arbitrary finite number of types (an n-ary product type), and in this case, it characterizes the expressions that behave as tuples of expressions of the corresponding types.

Most functional programming languages have a primitive notion of product type.

Additionally, many functional programming languages provide more general algebraic data types, which extend both product and sum types.