Honestly, I stayed away from the `Index` trait because there seems to be a lot of buzz about it being removed or substantially changed. I figured that if we're going to live with `Vec` not having index notation, than we should probably also live with `Captures` not having it either. (For the time being.) It would be nice if it could support `caps[1]` and `caps["name"]` (corresponding to the `at` and `name` methods), but I don't think that's currently possible? I didn't dig too much.

RE `pos`: Yes, it is a bit odd. The only alternatives I can think of are to assert that the index is in range or to encode the failure in the type. I don't think I really checked precedent for this in other libraries. Python seems to raise an `IndexError`. Similarly for asking for a named capture group that doesn't exist.

At the moment, I'm thinking that handling out-of-bounds like the rest of the standard lib does might be the best way to go (and this would, e.g., be consistent with Python). My least favorite option is to encode the failure into the return type.