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