sig
  type key
  type img
  type t
  val empty : t
  val is_empty : t -> bool
  val add : key -> img -> t -> t
  val find : key -> t -> img
  val remove : key -> t -> t
  val mem : key -> t -> bool
  val iter : (key -> img -> unit) -> t -> unit
  val map : (img -> img) -> t -> t
  val mapi : (key -> img -> img) -> t -> t
  val fold : (key -> img -> '-> 'a) -> t -> '-> 'a
  val compare : t -> t -> int
  val equal : t -> t -> bool
  val add' : key -> img option -> t -> t
  val find' : key -> t -> img option
  val add_list : (key * img) list -> t -> t
  val to_list : t -> (key * img) list
  val from_list : (key * img) list -> t
  val map_to_list : (key -> img -> 'a) -> t -> 'a list
  val mapi_and_map_to_list : (key -> img -> img * 'a) -> t -> t * 'a list
  val domain : t -> key list
  val fold_two :
    (key -> img option -> img option -> '-> 'a) -> '-> t -> t -> 'a
  val restrict : key list -> t -> t
  val iter_all : ?rev:bool -> (key -> img -> unit) -> t -> unit
  val map_all : ?rev:bool -> (img -> img) -> t -> t
  val mapi_all : ?rev:bool -> (key -> img -> img) -> t -> t
  val fold_all : ?rev:bool -> (key -> img -> '-> 'a) -> t -> '-> 'a
  val to_list_all : ?rev:bool -> t -> (key * img) list
  val compare_all : t -> t -> int
  val equal_all : t -> t -> bool
end