let take_while_with_index t ~f =
let buf = Buffer.create (length t) in
let rec loop idx =
match get t idx with
| Some c when f idx c -> Buffer.add_char buf c; loop (idx + 1)
| _ -> ()
in
loop 0;
Buffer.contents buf