Capture[S] = object si*: int when S is char: s*: string else: s*: S
Captures[S] = object capList*: seq[Capture[S]]
FixMethod = enum FixAll, FixOpen
proc `[]`[S](cs: Captures[S]; i: BackwardsIndex): Capture[S]
proc `[]`[S](cs: Captures[S]; i: int): Capture[S]
proc `[]`[S](cs: Captures[S]; range: HSlice[int, int]): seq[Capture[S]]
proc collectCaptures[S](caps: Captures[S]): Captures[S]
proc collectCapturesRef(caps: Captures): Ref
proc fixCaptures[S](s: openArray[S]; capStack: var Stack[CapFrame[S]]; fm: FixMethod): Captures[S]
proc len[S](captures: Captures[S]): int
iterator items[S](captures: Captures[S]): Capture[S]