`type positions`````
`type t`````
`val create : ?⁠initial_pos:pos ‑> unit ‑> t`

`add`, `add_twice` and `add_newline` must be called with strictly increasing `offset` values.

`val add : t ‑> offset:int ‑> unit`

int is absolute offset of the position

`val add_twice : t ‑> offset:int ‑> unit`
`val add_newline : t ‑> offset:int ‑> unit`

int is absolute offset of the newline character

`val contents : t ‑> positions`
`val reset : t ‑> pos ‑> unit`