Tuple
December 24, 2015 ยท View on GitHub
A Tuple is a simple data type that represents two types of values at the same
time. It is typically used to pass two values around without needing to
introduce some adhoc data type, such as the accumulating state of an operation
along with the previous result, or coupling an ID along with a set of values.
Note that while other libraries and languages may offer tuples of varying sizes,
the Tuple currently offered here is restricted to holding two values.
Construction
Tuple consists of a single constructor that accepts the two values to store in
the tuple Tuple :: a -> b -> Tuple a b. It is worth highlighting that the two
values associated with the Tuple may be completely different types.
Interaction
The values of a Tuple instance can be accessed by passing the Tuple to
Tuple.fst or Tuple.snd for the first and second values respectively.
Reference
Constructors
Tuple
:: (a, b) -> Tuple a b
Static functions
Tuple.fst
:: Tuple a b -> a
Returns the first element of a given Tuple.
Tuple.snd
:: Tuple a b -> b
Returns the second element of a given Tuple.
Instance methods
tuple.concat
:: (Semigroup a, Semigroup b) => Tuple a b ~> Tuple a b -> Tuple a b
Joins the Tuple instance with the given Tuple by concatenating the first
elements of each Tuple to produce the first element of the returned Tuple
and the second elements concatenated together to produce the returned second
element. To ensure the elements can be concatenated together, both types of the
Tuple elements must satisfy the Semigroup spec.
tuple.map
:: Tuple a b ~> (b -> c) -> Tuple a c
Transforms the second element of the Tuple instance by applying the given
function over the value.
tuple.ap
:: Semigroup a => Tuple a (b -> c) ~> Tuple a b -> Tuple a c
Transforms the second element of the given Tuple by applying the function held
in the second element of the Tuple instance. As this leaves both of the first
elements unmodified, the two must be combined in some way to produce a single
value to be stored in the first element of the returned Tuple. This is done by
requiring that the type of value in the first element satsifies the Semigroup
spec, with the resulting value determined by concatenating the two values
together.
tuple.equals
:: Tuple a b ~> * -> Boolean
Determines whether the given Tuple is equal to the Tuple instance. This is
determined by comparing the equality of values of the first element of each
Tuple, then comparing the values of the second element of each.
tuple.toString
:: Tuple a b ~> () -> String
Returns a string representation of the Tuple instance.