module Make:
The module to create a map with a fixed image
type key
The domain of the map
type img
The image of the map
type t
The map itself
val empty : t
The empty map
val is_empty : t -> bool
Tests if the map is empty or not.
val add : key -> img -> t -> t
add x y m returns a map containing the same bindings as
m, plus a binding of x to y. If x was already
bound in m, its previous binding disappears.
val find : key -> t -> img
Returns the image of the given key. Raises Not_found if
the key is not assigned to a value.
val remove : key -> t -> t
remove x m returns a map containing the same bindings
as m, except for x which is unbound in the returned map.
val mem : key -> t -> bool
mem x m returns true if m contains a binding for x, and false otherwise.
val iter : (key -> img -> unit) -> t -> unit
iter f m applies f to all bindings in map m. f
receives the key as first argument, and the associated
value as second argument. The bindings are passed to f
in increasing order with respect to the ordering over
the type of the keys. Only current bindings are presented
to f: bindings hidden by more recent bindings are not
passed to f.
val map : (img -> img) -> t -> t
map f m returns a map with same domain as m, where
the associated value a of all bindings of m has been
replaced by the result of the application of f to a.
The bindings are passed to f in increasing order with
respect to the ordering over the type of the keys.
val mapi : (key -> img -> img) -> t -> t
Same as S.map, but the function receives as arguments both
the key and the associated value for each binding of the map.
val fold : (key -> img -> 'a -> 'a) -> t -> 'a -> 'a
fold f m a computes (f kN dN ... (f k1 d1 a)...), where
k1 ... kN are the keys of all bindings in m
(in increasing order), and d1 ... dN are the
associated data.
val compare : t -> t -> int
Total ordering between maps. Here's no need to give a compare function for
the images like in the standard library, because the image compare function
is know throw the functor parameter Img.compare.
val equal : t -> t -> bool
equal m1 m2 tests whether the maps m1 and m2
are equal, that is, contain equal keys and associate them
with equal data.
Here's no need to give a compare function for
the images like in the standard library, because the image compare function
is know throw the functor parameter Img.compare.
New Functions
val add' : key -> img option -> t -> t
add' x y m returns m if y = None, and add x (Some e) m
if y = Some e.
val find' : key -> t -> img option
Similar to find, but does not raise an error if no
image is found.
val add_list : (key * img) list -> t -> t
add a list of key,img pairs to the map
val to_list : t -> (key * img) list
returns the hole map as list of key,img tuples
val from_list : (key * img) list -> t
creates a new map from a assignment list
val map_to_list : (key -> img -> 'a) -> t -> 'a list
map_to_list f m returns the list of values that f return, if it is
applied to the key and image values of the map m.
val mapi_and_map_to_list : (key -> img -> img * 'a) ->
t -> t * 'a list
mapi_and_map_to_list f m returns the list of values that f return, if it is
applied to the key and image values of the map m and allows to change
the image of the map at the same time.
val domain : t -> key list
Returns the domain of the map as a list of keys
val fold_two : (key -> img option -> img option -> 'a -> 'a) ->
'a -> t -> t -> 'a
fold_two f a m1 m2 fold the two maps m1 and m2 together.
For all key \in \dom(m1) \cap \dom(m2)
the function gets two Some img parameters, where img is the
result of find key m of the corresponding map. If key is only in one
of the domains, the image parameter of the other map is set to
None.
val restrict : key list -> t -> t
restrict kl m returns a new map, from which all bindings x from m are
removed, if they are not part of the key list kl.