"Given zero or more argument [[streams|iterables]], return a 
 new sequence containing all elements of every given stream.
 The elements of the resulting stream are ordered first 
 according to the stream in which they occur, and then 
 according to where they occur in that stream. If there are 
 no arguments, or if none of the argument streams contain 
 any elements, return the empty sequence.
 
 For example, the expression
 
     concatenate(1..3, [0.0], {\"hello\", \"world\"})
 
 results in the sequence `[1, 2, 3, 0.0, \"hello\", \"world\"]`
 which has the type `[Integer|Float|String*]`.
 
 To concatentate `String`s, use [[String.sum]]. When a lazy
 stream is desired, use [[expand]]."
see (`function expand`, 
     `function Iterable.chain`,
     `function Sequential.append`,
     `function String.sum`)
tagged("Streams")
shared Element[] concatenate<Element>(
        "The streams to concatenate."
        {Element*}* iterables) 
        => [ for (it in iterables) for (val in it) val ];