sig
  type t = {
    file : string;
    start_line : int;
    start_column : int;
    stop_line : int;
    stop_column : int;
  }
  val mk : string -> int -> int -> int -> int -> Location.t
  val mk_pair : string -> int * int -> int * int -> Location.t
  val mk_pos : Lexing.position -> Lexing.position -> Location.t
  val equal : t -> t -> bool
  val hash_fun : t CCHash.hash_fun
  val hash : t -> int
  val combine : Location.t -> Location.t -> Location.t
  val combine_list : Location.t list -> Location.t
  val smaller : Location.t -> than:Location.t -> bool
  val print : Format.formatter -> t -> unit
  val to_string : Location.t -> string
  val print_opt : Format.formatter -> Location.t option -> unit
  val to_string_opt : Location.t option -> string
  type 'a with_loc = { loc : Location.t option; value : 'a; }
  val with_loc : ?loc:Location.t -> '-> 'Location.with_loc
  val get : 'Location.with_loc -> 'a
  val get_loc : 'Location.with_loc -> Location.t option
  val set_file : Lexing.lexbuf -> string -> unit
  val get_file : Lexing.lexbuf -> string
  val of_lexbuf : Lexing.lexbuf -> Location.t
end