tuple
Technology Dictionary -> tupleSearch:
tupletuple
Technology Dictionary -> tupleSearch:
tuple
In functional languages, a data object containing two or
more components. Also known as a product type or pair,
triple, quad, etc. Tuples of different sizes have different
types, in contrast to lists where the type is independent of
the length. The components of a tuple may be of different
types whereas all elements of a list have the same type.
Examples of tuples in Haskell notation are (1,2),
("Tuple",True), (w,(x,y),z). The degenerate tuple with zero
components, written (), is known as the unit type since it has
only one possible value which is also written ().
The implementation of tuples in a language may be either
"lifted" or not. If tuples are lifted then (bottom,bottom)
/= bottom and the evaluation of a tuple may fail to terminate.
E.g. in Haskell:
f (x,y) = 1 --> f bottom = bottom
f (bottom,bottom) = 1
With lifted tuples, a tuple pattern is refutable. Thus in
Haskell, pattern matching on tuples is the same as pattern
matching on types with multiple constructors (algebraic data
types) - the expression being matched is evaluated as far as
the top level constructor, even though, in the case of tuples,
there is only one possible constructor for a given type.
If tuples are unlifted then (bottom, bottom) = bottom and
evaluation of a tuple will never fail to terminate though any
of the components may. E.g. in Miranda:
f (x,y) = 1 --> f bottom = 1
f (bottom,bottom) = 1
Thus in Miranda, any object whose type is compatible with a
tuple pattern is assumed to match at the top level without
evaluation - it is an irrefutable pattern. This also
applies to user defined data types with only one constructor.
In Haskell, patterns can be made irrefutable by adding a "~"
as in
f ~(x,y) = 1.
If tuple constructor functions were strict in all their
arguments then (bottom,x) = (x,bottom) = bottom for any x so
matching a refutable pattern would fail to terminate if any
component was bottom.