sig
  type position = { chr : int; line : int; }
  type range = {
    file : string;
    from_position : Locality.position;
    to_position : Locality.position;
  }
  type t = Locality.range
  type 'a annot = 'a * Locality.t
  type 'a maybe = ?pos:Locality.t -> 'a
  val of_pos : Lexing.position -> Lexing.position -> Locality.t
  val dummy : Locality.t
  val dummy_annot : '-> 'Locality.annot
  val has_dummy_annot : 'Locality.annot -> bool
  val to_string : Locality.t -> string
  val print : Format.formatter -> Locality.t -> unit
  val print_annot :
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Locality.annot -> unit
  val annot_of_yojson :
    ?filenames:string array ->
    (Yojson.Basic.json -> 'a) -> Yojson.Basic.json -> 'Locality.annot
  val annot_to_yojson :
    ?filenames:int Mods.StringMap.t ->
    ('-> Yojson.Basic.json) -> 'Locality.annot -> Yojson.Basic.json
  val write_range : Bi_outbuf.t -> Locality.t -> unit
  val string_of_range : ?len:int -> Locality.t -> string
  val read_range : Yojson.Safe.lexer_state -> Lexing.lexbuf -> Locality.t
  val range_of_string : string -> Locality.t
end