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