Module CCMixmap

module CCMixmap: sig .. end

Maps with Heterogeneous Values

status: experimental

      module M = CCMixmap.Make(CCInt)

      let inj_int = CCMixmap.create_inj()
      let inj_str = CCMixmap.create_inj()
      let inj_list_int = CCMixmap.create_inj()

      let m =
        M.empty
        |> M.add ~inj:inj_int 1 1
        |> M.add ~inj:inj_str 2 "2"
        |> M.add ~inj:inj_list_int 3 [3;3;3]

          assert (M.get ~inj:inj_int 1 m = Some 1)
          assert (M.get ~inj:inj_str 1 m = None)
          assert (M.get ~inj:inj_str 2 m = Some "2")
          assert (M.get ~inj:inj_int 2 m = None)
          assert (M.get ~inj:inj_list_int 3 m = Some [3;3;3])
          assert (M.get ~inj:inj_str 3 m = None)
    

Since 0.16 change of API, the map is last argument to make piping with [|>] easier.

type 'a injection 
An accessor for values of type 'a in any map. Values put in the map using a key can only be retrieved using this very same key.
val create_inj : unit -> 'a injection
Return a value that works for a given type of values. This function is normally called once for each type of value. Several keys may be created for the same type, but a value set with a given setter can only be retrieved with the matching getter. The same key can be reused across multiple maps (although not in a thread-safe way).
module type S = sig .. end
module type ORD = sig .. end
module Make (X : ORD: S  with type key = X.t