diff --git a/src/core/CCList.ml b/src/core/CCList.ml index 6fe811e0..e02de8e2 100644 --- a/src/core/CCList.ml +++ b/src/core/CCList.ml @@ -898,17 +898,17 @@ module Assoc = struct | (y,z)::l' -> if eq x y then z else search_exn eq l' x - let get_exn ?(eq=(=)) l x = search_exn eq l x + let get_exn ?(eq=(=)) x l = search_exn eq l x - let get ?(eq=(=)) l x = + let get ?(eq=(=)) x l = try Some (search_exn eq l x) with Not_found -> None (*$T - Assoc.get [1, "1"; 2, "2"] 1 = Some "1" - Assoc.get [1, "1"; 2, "2"] 2 = Some "2" - Assoc.get [1, "1"; 2, "2"] 3 = None - Assoc.get [] 42 = None + Assoc.get 1 [1, "1"; 2, "2"] = Some "1" + Assoc.get 2 [1, "1"; 2, "2"] = Some "2" + Assoc.get 3 [1, "1"; 2, "2"] = None + Assoc.get 42 [] = None *) (* search for a binding for [x] in [l], and calls [f x (Some v) rest] @@ -921,27 +921,27 @@ module Assoc = struct then f x (Some y') (List.rev_append acc l') else search_set eq ((x',y')::acc) l' x ~f - let set ?(eq=(=)) l x y = + let set ?(eq=(=)) x y l = search_set eq [] l x ~f:(fun x _ l -> (x,y)::l) (*$T - Assoc.set [1,"1"; 2, "2"] 2 "two" |> List.sort Pervasives.compare \ + Assoc.set 2 "two" [1,"1"; 2, "2"] |> List.sort Pervasives.compare \ = [1, "1"; 2, "two"] - Assoc.set [1,"1"; 2, "2"] 3 "3" |> List.sort Pervasives.compare \ + Assoc.set 3 "3" [1,"1"; 2, "2"] |> List.sort Pervasives.compare \ = [1, "1"; 2, "2"; 3, "3"] *) - let mem ?(eq=(=)) l x = + let mem ?(eq=(=)) x l = try ignore (search_exn eq l x); true with Not_found -> false (*$T - Assoc.mem [1,"1"; 2,"2"; 3, "3"] 1 - not (Assoc.mem [1,"1"; 2,"2"; 3, "3"] 4) + Assoc.mem 1 [1,"1"; 2,"2"; 3, "3"] + not (Assoc.mem 4 [1,"1"; 2,"2"; 3, "3"]) *) - let update ?(eq=(=)) l x ~f = + let update ?(eq=(=)) ~f x l = search_set eq [] l x ~f:(fun x opt_y rest -> match f opt_y with @@ -949,17 +949,17 @@ module Assoc = struct | Some y' -> (x,y') :: rest) (*$= [1,"1"; 2,"22"] \ - (Assoc.update [1,"1"; 2,"2"] 2 \ + (Assoc.update 2 [1,"1"; 2,"2"] \ ~f:(function Some "2" -> Some "22" | _ -> assert false) |> lsort) [1,"1"; 3,"3"] \ - (Assoc.update [1,"1"; 2,"2"; 3,"3"] 2 \ + (Assoc.update 2 [1,"1"; 2,"2"; 3,"3"] \ ~f:(function Some "2" -> None | _ -> assert false) |> lsort) [1,"1"; 2,"2"; 3,"3"] \ - (Assoc.update [1,"1"; 2,"2"] 3 \ + (Assoc.update 3 [1,"1"; 2,"2"] \ ~f:(function None -> Some "3" | _ -> assert false) |> lsort) *) - let remove ?(eq=(=)) l x = + let remove ?(eq=(=)) x l = search_set eq [] l x ~f:(fun _ opt_y rest -> match opt_y with | None -> l (* keep as is *) @@ -967,11 +967,11 @@ module Assoc = struct (*$= [1,"1"] \ - (Assoc.remove [1,"1"; 2,"2"] 2 |> lsort) + (Assoc.remove 2 [1,"1"; 2,"2"] |> lsort) [1,"1"; 3,"3"] \ - (Assoc.remove [1,"1"; 2,"2"; 3,"3"] 2 |> lsort) + (Assoc.remove 2 [1,"1"; 2,"2"; 3,"3"] |> lsort) [1,"1"; 2,"2"] \ - (Assoc.remove [1,"1"; 2,"2"] 3 |> lsort) + (Assoc.remove 3 [1,"1"; 2,"2"] |> lsort) *) end diff --git a/src/core/CCList.mli b/src/core/CCList.mli index 26970729..2ed996c5 100644 --- a/src/core/CCList.mli +++ b/src/core/CCList.mli @@ -315,29 +315,29 @@ val repeat : int -> 'a t -> 'a t module Assoc : sig type ('a, 'b) t = ('a*'b) list - val get : ?eq:('a->'a->bool) -> ('a,'b) t -> 'a -> 'b option + val get : ?eq:('a->'a->bool) -> 'a -> ('a,'b) t -> 'b option (** Find the element *) - val get_exn : ?eq:('a->'a->bool) -> ('a,'b) t -> 'a -> 'b - (** Same as [get] + val get_exn : ?eq:('a->'a->bool) -> 'a -> ('a,'b) t -> 'b + (** Same as [get], but unsafe @raise Not_found if the element is not present *) - val set : ?eq:('a->'a->bool) -> ('a,'b) t -> 'a -> 'b -> ('a,'b) t + val set : ?eq:('a->'a->bool) -> 'a -> 'b -> ('a,'b) t -> ('a,'b) t (** Add the binding into the list (erase it if already present) *) - val mem : ?eq:('a->'a->bool) -> ('a,_) t -> 'a -> bool - (** [mem l x] returns [true] iff [x] is a key in [l] + val mem : ?eq:('a->'a->bool) -> 'a -> ('a,_) t -> bool + (** [mem x l] returns [true] iff [x] is a key in [l] @since 0.16 *) val update : - ?eq:('a->'a->bool) -> ('a,'b) t -> 'a -> f:('b option -> 'b option) -> ('a,'b) t - (** [update l k ~f] updates [l] on the key [k], by calling [f (get l k)] + ?eq:('a->'a->bool) -> f:('b option -> 'b option) -> 'a -> ('a,'b) t -> ('a,'b) t + (** [update k ~f l] updates [l] on the key [k], by calling [f (get l k)] and removing [k] if it returns [None], mapping [k] to [v'] if it returns [Some v'] @since 0.16 *) - val remove : ?eq:('a->'a->bool) -> ('a,'b) t -> 'a -> ('a,'b) t - (** [remove l k] removes the first occurrence of [k] from [l]. + val remove : ?eq:('a->'a->bool) -> 'a -> ('a,'b) t -> ('a,'b) t + (** [remove x l] removes the first occurrence of [k] from [l]. @since 0.17 *) end