module K1: sig .. end
type ('k, 'd) t 
an ephemeron with one key
val create : unit -> ('k, 'd) t
Ephemeron.K1.create () creates an ephemeron with one key. The
      data and the key are empty
val get_key : ('k, 'd) t -> 'k option
Ephemeron.K1.get_key eph returns None if the key of eph is
      empty, Some x (where x is the key) if it is full.
val get_key_copy : ('k, 'd) t -> 'k option
Ephemeron.K1.get_key_copy eph returns 
None if the key of 
eph is
      empty, 
Some x (where 
x is a (shallow) copy of the key) if
      it is full. This function has the same GC friendliness as 
Weak.get_copy
 
val set_key : ('k, 'd) t -> 'k -> unit
Ephemeron.K1.set_key eph el sets the key of eph to be a
      (full) key to el
val unset_key : ('k, 'd) t -> unit
Ephemeron.K1.unset_key eph el sets the key of eph to be an
      empty key. Since there is only one key, the ephemeron starts
      behaving like a reference on the data.
val check_key : ('k, 'd) t -> bool
Ephemeron.K1.check_key eph returns 
true if the key of the 
eph
      is full, 
false if it is empty. Note that even if
      
Ephemeron.K1.check_key eph returns 
true, a subsequent
      
Ephemeron.K1.get_keyeph can return 
None.
 
val blit_key : ('k, 'a) t -> ('k, 'b) t -> unit
Ephemeron.K1.blit_key eph1 eph2 sets the key of eph2 with
      the key of eph1. Contrary to using Ephemeron.K1.get_key
      followed by Ephemeron.K1.set_key or Ephemeon.K1.unset_key
      this function does not prevent the incremental GC from erasing
      the value in its current cycle.
val get_data : ('k, 'd) t -> 'd option
Ephemeron.K1.get_data eph returns None if the data of eph is
      empty, Some x (where x is the data) if it is full.
val get_data_copy : ('k, 'd) t -> 'd option
Ephemeron.K1.get_data_copy eph returns 
None if the data of 
eph is
      empty, 
Some x (where 
x is a (shallow) copy of the data) if
      it is full. This function has the same GC friendliness as 
Weak.get_copy
 
val set_data : ('k, 'd) t -> 'd -> unit
Ephemeron.K1.set_data eph el sets the data of eph to be a
      (full) data to el
val unset_data : ('k, 'd) t -> unit
Ephemeron.K1.unset_key eph el sets the key of eph to be an
      empty key. The ephemeron starts behaving like a weak pointer.
val check_data : ('k, 'd) t -> bool
Ephemeron.K1.check_data eph returns 
true if the data of the 
eph
      is full, 
false if it is empty. Note that even if
      
Ephemeron.K1.check_data eph returns 
true, a subsequent
      
Ephemeron.K1.get_dataeph can return 
None.
 
val blit_data : ('a, 'd) t -> ('b, 'd) t -> unit
Ephemeron.K1.blit_data eph1 eph2 sets the data of eph2 with
      the data of eph1. Contrary to using Ephemeron.K1.get_data
      followed by Ephemeron.K1.set_data or Ephemeon.K1.unset_data
      this function does not prevent the incremental GC from erasing
      the value in its current cycle.
module Make: 
Functor building an implementation of a weak hash table
module MakeSeeded: 
Functor building an implementation of a weak hash table.