This module defines interfaces used in Map. See those docs for a description of the design.
This module defines module types
{Creators,Accessors}{1,2,3,_generic,_with_comparator}
. It uses check functors to
ensure that each module type is an instance of the corresponding _generic
one.
We must treat Creators
and Accessors
separately, because we sometimes need to
choose different instantiations of their options
. In particular, Map
itself
matches Creators3_with_comparator
but Accessors3
(without comparator).
module Binable = Core_kernel__.Binable0
module Map_intf = Base.Map_intf
module Map = Base.Map
module With_comparator = Map_intf.With_comparator
module With_first_class_module = Map_intf.With_first_class_module
module Without_comparator = Map_intf.Without_comparator
module Tree = Map.Using_comparator.Tree
module type Key_plain : sig ... end
module type Key : sig ... end
module type Key_binable : sig ... end
module type Key_hashable : sig ... end
module type Key_binable_hashable : sig ... end
module Symmetric_diff_element : sig ... end
module type Accessors_generic : sig ... end
module type Accessors1 : sig ... end
module type Accessors2 : sig ... end
module type Accessors3 : sig ... end
module type Accessors3_with_comparator : sig ... end
module Check_accessors : functor (T : Core_kernel__.T.T3) -> functor (Tree : Core_kernel__.T.T3) -> functor (Key : Core_kernel__.T.T1) -> functor (Options : Core_kernel__.T.T3) -> functor (M : Accessors_generic with type (a, b, c) options := (a, b, c) Options.t with type (a, b, c) t := (a, b, c) T.t with type (a, b, c) tree := (a, b, c) Tree.t with type a key := a Key.t) -> sig ... end
Consistency checks (same as in Container
).
module Check_accessors1 : functor (M : Accessors1) -> sig ... end
module Check_accessors2 : functor (M : Accessors2) -> sig ... end
module Check_accessors3 : functor (M : Accessors3) -> sig ... end
module Check_accessors3_with_comparator : functor (M : Accessors3_with_comparator) -> sig ... end
module type Creators_generic : sig ... end
module type Creators1 : sig ... end
module type Creators2 : sig ... end
module type Creators3_with_comparator : sig ... end
module Check_creators : functor (T : Core_kernel__.T.T3) -> functor (Tree : Core_kernel__.T.T3) -> functor (Key : Core_kernel__.T.T1) -> functor (Options : Core_kernel__.T.T3) -> functor (M : Creators_generic with type (a, b, c) options := (a, b, c) Options.t with type (a, b, c) t := (a, b, c) T.t with type (a, b, c) tree := (a, b, c) Tree.t with type a key := a Key.t) -> sig ... end
module Check_creators1 : functor (M : Creators1) -> sig ... end
module Check_creators2 : functor (M : Creators2) -> sig ... end
module Check_creators3_with_comparator : functor (M : Creators3_with_comparator) -> sig ... end
module type Creators_and_accessors_generic : sig ... end
module type Creators_and_accessors1 : sig ... end
module type Creators_and_accessors2 : sig ... end
module type Creators_and_accessors3_with_comparator : sig ... end
module Make_S_plain_tree : functor (Key : Comparator.S) -> sig ... end
module type S_plain : sig ... end
module type S : sig ... end
module type S_binable : sig ... end