Data.Tuple.Nested
- Package
- purescript-tuples
- Repository
- purescript/purescript-tuples
Tuples that are not restricted to two elements.
Here is an example of a 3-tuple:
> tuple = tuple3 1 "2" 3.0
> tuple
(Tuple 1 (Tuple "2" (Tuple 3.0 unit)))
Notice that a tuple is a nested structure not unlike a list. The type of tuple is this:
> :t tuple
Tuple Int (Tuple String (Tuple Number Unit))
That, however, can be abbreviated with the Tuple3 type:
Tuple3 Int String Number
All tuple functions are numbered from 1 to 10. That is, there's
a get1 and a get10.
The getN functions accept tuples of length N or greater:
get1 tuple = 1
get3 tuple = 3
get4 tuple -- type error. `get4` requires a longer tuple.
The same is true of the overN functions:
over2 negate (tuple3 1 2 3) = tuple3 1 (-2) 3
uncurryN can be used to convert a function that takes N arguments to one that takes an N-tuple:
uncurry2 (+) (tuple2 1 2) = 3
The reverse curryN function converts functions that take
N-tuples (which are rare) to functions that take N arguments.
In addition to types like Tuple3, there are also types like
T3. Whereas Tuple3 describes a tuple with exactly three
elements, T3 describes a tuple of length two or longer. More
specifically, T3 requires two element plus a "tail" that may be
unit or more tuple elements. Use types like T3 when you want to
create a set of functions for arbitrary tuples. See the source for how that's done.
#(/\) Source
Operator alias for Data.Tuple.Tuple (right-associative / precedence 6)
Shorthand for constructing n-tuples as nested pairs.
a /\ b /\ c /\ d /\ unit becomes Tuple a (Tuple b (Tuple c (Tuple d unit)))
#type (/\) Source
Operator alias for Data.Tuple.Tuple (right-associative / precedence 6)
Shorthand for constructing n-tuple types as nested pairs.
forall a b c d. a /\ b /\ c /\ d /\ Unit becomes
forall a b c d. Tuple a (Tuple b (Tuple c (Tuple d Unit)))
- Modules
- Data.
Tuple - Data.
Tuple. Nested