let on_output t ~f = { t with next = fun () -> match t.next () with | `output o -> `output (f o) | `not_ready -> `not_ready | `end_of_stream -> `end_of_stream }