functor (Key : OrderedType->
  functor (Img : OrderedType->
    sig
      type key = Key.t
      type img = Img.t
      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
    end