range = [[private { R r; }
this(R r) { this.r = r; } @property bool empty() { return r.length == 0; } @property auto front() { return r[0]; } @property void popFront() { r = r[1..$]; }Of course there can be all the different kinds of ranges (rangei = infinite, rangef = forward range etc.).