Function std.range.chain
Spans multiple ranges in sequence. The function chain takes any
number of ranges and returns a Chain!(R1, R2,...) object. The
ranges may be different, but they must have the same element type. The
result is a range that offers the front, popFront, and empty primitives. If all input ranges offer random access and length, Chain offers them as well.
						
				auto chain(Ranges...)
				(
				
				  Ranges rs
				
				)
				
				if (Ranges
				Note that repeated random access of the resulting range is likely to perform somewhat badly since lengths of the ranges in the chain have to be added up for each random access operation. Random access to elements of the first remaining range is still efficient.
If only one range is offered to Chain or chain, the Chain type exits the picture by aliasing itself directly to that
range's type.
Parameters
| Name | Description | 
|---|---|
| rs | the input ranges to chain together | 
Returns
An input range at minimum. If all of the ranges in rs provide
    a range primitive, the returned range will also provide that range
    primitive.
See Also
only to chain values to a range
Example
import stdExample
Range primitives are carried over to the returned range if all of the ranges provide them
import stdExample
Due to safe type promotion in D, chaining together different
character ranges results in a uint range.
Use byChar, byWchar, and byDchar on the ranges to get the type you need.
import stdExample
https
//issues.dlang.org/show_bug.cgi?id=24064
import stdAuthors
Andrei Alexandrescu, David Simcha, Jonathan M Davis, and Jack Stouffer. Credit for some of the ideas in building this module goes to Leonardo Maffi.