let stream_of_channel_lines_gen ~close inch =
Stream.from
(let inch_ref = ref (Some inch)
in
fun _ ->
match !inch_ref with
| None -> None
| Some inch ->
(match input_line_opt inch with
| (Some _ as some_line) -> some_line
| None ->
(if close then (close_in inch; inch_ref := None) else ();
None)))