functor (Key : Set.OrderedType) ->
  sig
    type k = Key.t
    type 'a t
    val empty : 'a t
    val set_default : 'a t -> 'a option -> 'a t
    val insert : 'a t -> k * 'a -> 'a t
    val insert_opt : 'a t -> k option * 'a -> 'a t
    val apply : 'a t -> k -> 'a option
    val apply_opt : 'a t -> k option -> 'a option
    val remove : 'a t -> k -> 'a t
    val in_dom : k -> 'a t -> bool
  end