export function* range(
  start: number,
  end: number = undefined,
  step: number = 1
): IterableIterator<number> {
	if (end === undefined) { end = start; start = 0; }
	if (start > end) { for (let i = start; i > end; i -= step) yield i; }
	else for (let i = start; i < end; i += step) yield i;
}
