```"Given a stream of tuples, return two streams. The
first stream produces the first elements of the
given tuples, and the second stream produces the
remaining elements of the given tuples.

Thus:

tuples[i] == [unzip(tuples)[i],
*unzip(tuples)[i]]"
tagged("Streams")
given Tail satisfies Element[]
given Absent satisfies Null
=> tuple.first),
=> tuple.rest)];

"Given a stream of pairs, return two streams. The
first stream produces the first elements of the
given pairs, and the second stream produces the
second elements of the given pairs.

Thus:

pairs[i] == [unzipPairs(pairs)[i],
unzipPairs(pairs)[i]]"
tagged("Streams")
shared [Iterable<First,Absent>, Iterable<Second,Absent>]
unzipPairs<First,Second,Absent>
(Iterable<[First,Second],Absent> pairs)
given Absent satisfies Null
=> [pairs.map(([First,Second] pair) => pair),
pairs.map(([First,Second] pair) => pair)];

"Given a stream of entries, return two streams. The
first stream produces the keys of the given entries,
and the second stream produces the items of the given
entries.

Thus:

entries[i] == unzipEntries(entries)[i]
-> unzipEntries(entries)[i]"
tagged("Streams")
shared [Iterable<Key,Absent>, Iterable<Item,Absent>]
unzipEntries<Key,Item,Absent>
(Iterable<<Key->Item>,Absent> entries)
given Key satisfies Object
given Absent satisfies Null
=> [entries.map(Entry<Key,Item>.key),
entries.map(Entry<Key,Item>.item)];
```