let with_file op opname cl func filename = let ch = try op filename with | e -> error ~opn: opname ~fn: filename ~e in try let r = func ch in (cl ch; r) with | e -> (cl ch; raise e)