OCaml line-by-line file reader that closes its channel
OCaml
let iter_lines path f =
let ic = open_in_bin path in
Fun.protect
~finally:(fun () -> close_in_noerr ic)
(fun () ->
try
while true do
f (input_line ic)
done
with End_of_file -> ())
let read_lines path =
let lines = ref [] in
iter_lines path (fun line -> lines := line :: !lines);
List.rev !lines