let fold_channel_lines func init ch =
  let rec fold_channel_lines_inner init =
    match input_line_opt ch with
    | None -> init
    | Some line -> fold_channel_lines_inner (func init line)
  in fold_channel_lines_inner init