sig
  type in_value
  type out_value
  type 'a t
  val empty : 'a Fold_map.Fold_map.t
  val singleton : 'a -> Fold_map.Fold_map.in_value -> 'a Fold_map.Fold_map.t
  val is_empty : 'a Fold_map.Fold_map.t -> bool
  val cardinal : 'a Fold_map.Fold_map.t -> int
  val add :
    key:'a ->
    data:Fold_map.Fold_map.in_value ->
    'a Fold_map.Fold_map.t -> 'a Fold_map.Fold_map.t
  val find : 'a Fold_map.Fold_map.t -> 'a -> Fold_map.Fold_map.out_value
  val remove : 'a Fold_map.Fold_map.t -> 'a -> 'a Fold_map.Fold_map.t
  val set :
    key:'a ->
    data:Fold_map.Fold_map.out_value ->
    'a Fold_map.Fold_map.t -> 'a Fold_map.Fold_map.t
  val mem : 'a Fold_map.Fold_map.t -> 'a -> bool
  val iter :
    f:(key:'a -> data:Fold_map.Fold_map.out_value -> unit) ->
    'a Fold_map.Fold_map.t -> unit
  val fold :
    f:(key:'a -> data:Fold_map.Fold_map.out_value -> 'b -> 'b) ->
    'a Fold_map.Fold_map.t -> init:'b -> 'b
  val filter :
    f:(key:'a -> data:Fold_map.Fold_map.out_value -> bool) ->
    'a Fold_map.Fold_map.t -> 'a Fold_map.Fold_map.t
  val keys : 'a Fold_map.Fold_map.t -> 'a list
  val data : 'a Fold_map.Fold_map.t -> Fold_map.Fold_map.out_value list
  val to_alist :
    'a Fold_map.Fold_map.t -> ('a * Fold_map.Fold_map.out_value) list
  val of_list :
    ('a * Fold_map.Fold_map.in_value) list -> 'a Fold_map.Fold_map.t
  val for_all :
    f:(Fold_map.Fold_map.out_value -> bool) -> 'a Fold_map.Fold_map.t -> bool
  val exists :
    f:(Fold_map.Fold_map.out_value -> bool) -> 'a Fold_map.Fold_map.t -> bool
  val to_map :
    'a Fold_map.Fold_map.t ->
    ('a, Fold_map.Fold_map.out_value) Core.Std.Map.t
  val of_map :
    ('a, Fold_map.Fold_map.out_value) Core.Std.Map.t ->
    'a Fold_map.Fold_map.t
end