18 lines
490 B
OCaml
18 lines
490 B
OCaml
let bracket ~make ~act ~free =
|
|
let x = make () in
|
|
match act x with
|
|
| result -> free x; result
|
|
| exception e -> free x; raise e
|
|
|
|
let infile ~act name =
|
|
bracket ~make:(fun () -> open_in name) ~act ~free:close_in_noerr
|
|
|
|
let infile_lines ~line:f ~of_seq name =
|
|
let get_line file =
|
|
match input_line file with
|
|
| exception End_of_file -> None
|
|
| line -> Some (f line, file)
|
|
in
|
|
let act file = of_seq (Seq.unfold get_line file) in
|
|
infile name ~act
|