(S : Identifier) = struct
  type t = S.t * Biocaml_range.t
  with compare, sexp

  let make s lo hi =
    let open Or_error in
    Biocaml_range.make lo hi >>= fun r ->
    Or_error.return (s, r)

  let seq = fst

  let size (_, r) = Biocaml_range.size r

  let to_string (seq, { Biocaml_range.lo ; hi }) =
    sprintf "%s:%d-%d" (S.to_string seq) lo hi
end