nitpick, but you have `_range` and `index`. I understand *why* you did it like that, but I think you should use a consistent naming scheme. Arguably, using `range` is perfectly fine, as the shadowing actually *protects* you from calling the wrong "range".