let read0 ic =
  let iz = Bgzf.of_in_channel ic in
  read_sam_header iz >>= fun sam_header ->
  read_reference_information iz >>= fun ref_seq ->
  let header = { sam_header ; ref_seq } in
  return (header, read_alignment_stream iz)