This thing bothers me to no end. On the one hand, I think it's important to be able to inspect code and say 'yup, that's a range' or whatever. But on the other, this is like with the `length` property. Kind of needlessly passing internal state around where it shouldn't be. I think the smell here is because something like `range` produces a `seq`, and for all intents and purposes is one, but it doesn't "extend" it. Extension is such a beat up term, but I can't think of a better way to put it. It's about giving the thing an identity; for better or worse, a type. The way I've done it here smells, I think, but I can't think of a better way at the moment.

Maybe `make` needs to be extracted, such that it produces generic iterators or something, and `seq` is sugar to deal with turning `seq` like things such as strings, arrays, and enumerable properties into a sequence. I don't know.