sig
  type t
  type widen_hint = Ival.Widen_Hints.t
  type var_key = Default | All | VarKey of Base.t
  type stmt_key = Cil_types.stmt option
  val empty : Widen_type.t
  val default : Widen_type.t
  val add_num_hints :
    Widen_type.stmt_key ->
    Widen_type.var_key ->
    Widen_type.widen_hint -> Widen_type.t -> Widen_type.t
  val add_var_hints :
    Cil_types.stmt -> BaseUtils.BaseSet.t -> Widen_type.t -> Widen_type.t
  val hints_from_keys :
    Cil_types.stmt ->
    Widen_type.t ->
    BaseUtils.BaseSet.t * (Base.t -> Locations.Location_Bytes.widen_hint)
  module Datatype :
    sig
      type t = t
      val rehash : t -> t
      val descr : Unmarshal.t
      val copy : t -> t
      val name : string
      val register_comparable :
        ?compare:(t -> t -> int) ->
        ?equal:(t -> t -> bool) ->
        ?hash:(t -> int) -> ?physical_hash:(t -> int) -> unit -> unit
      val is_comparable_set : unit -> bool
      val hash : t -> int
      val physical_hash : t -> int
      val equal : t -> t -> bool
      val compare : t -> t -> int
      val contain_project : (Project.project -> t -> bool) option ref
    end
end