module CCMixtbl:sig..end
From https://github.com/mjambon/mixtbl (thanks to him). Example:
      let inj_int = CCMixtbl.create_inj () ;;
      let tbl = CCMixtbl.create 10 ;;
      OUnit.assert_equal None (CCMixtbl.get ~inj:inj_int tbl "a");;
      CCMixtbl.set inj_int tbl "a" 1;;
      OUnit.assert_equal (Some 1) (CCMixtbl.get ~inj:inj_int tbl "a");;
      let inj_string = CCMixtbl.create_inj () ;;
      CCMixtbl.set inj_string tbl "b" "Hello";
      OUnit.assert_equal (Some "Hello") (CCMixtbl.get inj_string tbl "b");;
      OUnit.assert_equal None (CCMixtbl.get inj_string tbl "a");;
      OUnit.assert_equal (Some 1) (CCMixtbl.get inj_int tbl "a");;
      CCMixtbl.set inj_string tbl "a" "Bye";;
      OUnit.assert_equal None (CCMixtbl.get inj_int tbl "a");;
      OUnit.assert_equal (Some "Bye") (CCMixtbl.get inj_string tbl "a");;
    type 'a t 
'a represents the type of the keys.type 'b injection 
val create : int -> 'a tcreate n creates a hash table of initial size n.val create_inj : unit -> 'b injectionval get : inj:'b injection -> 'a t -> 'a -> 'b optionval set : inj:'b injection -> 'a t -> 'a -> 'b -> unitinjval find : inj:'b injection -> 'a t -> 'a -> 'bNot_found if either the key is not found, or if its value
      doesn't belong to the right typeval length : 'a t -> intval clear : 'a t -> unitval remove : 'a t -> 'a -> unitval copy : 'a t -> 'a tval mem : inj:'b injection -> 'a t -> 'a -> boolval iter_keys : 'a t -> ('a -> unit) -> unitval fold_keys : 'a t -> 'b -> ('b -> 'a -> 'b) -> 'btype'asequence =('a -> unit) -> unit
val keys_seq : 'a t -> 'a sequenceval bindings_of : inj:'b injection -> 'a t -> ('a * 'b) sequencetype value = 
| | 
Value :  | 
val bindings : 'a t -> ('a * value) sequence