add CCHashtbl.Poly and fix issue in Containers (close #46)

This commit is contained in:
Simon Cruanes 2017-02-11 13:28:47 +01:00
parent edc488b909
commit 8ddacbb028
3 changed files with 185 additions and 175 deletions

View file

@ -10,6 +10,7 @@ type 'a printer = Format.formatter -> 'a -> unit
(** {2 Polymorphic tables} *)
module Poly = struct
let get tbl x =
try Some (Hashtbl.find tbl x)
with Not_found -> None
@ -135,6 +136,9 @@ let print pp_k pp_v fmt m =
Format.pp_print_cut fmt ()
) m;
Format.fprintf fmt "}@]"
end
include Poly
(** {2 Functor} *)

View file

@ -12,6 +12,9 @@ type 'a printer = Format.formatter -> 'a -> unit
(** {2 Polymorphic tables} *)
(** This sub-module contains the extension of the standard polymorphic hashtbl. *)
module Poly : sig
val get : ('a,'b) Hashtbl.t -> 'a -> 'b option
(** Safe version of {!Hashtbl.find} *)
@ -102,6 +105,9 @@ val get_or_add : ('a, 'b) Hashtbl.t -> f:('a -> 'b) -> k:'a -> 'b
val print : 'a printer -> 'b printer -> ('a, 'b) Hashtbl.t printer
(** Printer for table
@since 0.13 *)
end
include module type of Poly
(** {2 Functor} *)

View file

@ -44,7 +44,7 @@ module Hashtbl = struct
and module Make = Hashtbl.Make
and type ('a,'b) t = ('a,'b) Hashtbl.t
)
(* still unable to include CCHashtbl itself, for the polymorphic functions *)
include CCHashtbl.Poly
module type S' = CCHashtbl.S
module Make' = CCHashtbl.Make
end