diff --git a/CHANGELOG.md b/CHANGELOG.md index e36a8e51b..d4c8e84d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 3.14 + + +- predicate combinators: `and_pred` and `or_pred` +- feat `pp`: add a bunch of extensions +- Kleisli Composition Operator and Apply_or for option/result/fun (#455) +- add `CCByte_buffer.to_slice` +- add a byte slice type `CCByte_slice` +- add `cons_when` to `CCListLabels` +- add `(|||>)` and `||>` to `CCFun` +- `CCVector`: Add function foldi +- add `containers.pvec`, a persistent vector type. + +- perf: use a monomorphic impl for `CCMonomorphic.{min,max}` + ## 3.13.1 - list: TRMC was in 4.14, we can use it earlier diff --git a/containers-data.opam b/containers-data.opam index a0eae5c8d..12b4d9a70 100644 --- a/containers-data.opam +++ b/containers-data.opam @@ -1,6 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -version: "3.13.1" +version: "3.14" synopsis: "A set of advanced datatypes for containers" maintainer: ["c-cube"] authors: ["c-cube"] diff --git a/containers.opam b/containers.opam index 2d9830aa0..de0ad37ea 100644 --- a/containers.opam +++ b/containers.opam @@ -1,6 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -version: "3.13.1" +version: "3.14" synopsis: "A modular, clean and powerful extension of the OCaml standard library" maintainer: ["c-cube"] diff --git a/dune-project b/dune-project index 3f1268da8..40eeadf3e 100644 --- a/dune-project +++ b/dune-project @@ -2,7 +2,7 @@ (name containers) (generate_opam_files true) -(version 3.13.1) +(version 3.14) (authors c-cube) (maintainers c-cube) (license BSD-2-Clause) diff --git a/src/core/CCByte_buffer.mli b/src/core/CCByte_buffer.mli index 1bdab2b5a..a67f277cd 100644 --- a/src/core/CCByte_buffer.mli +++ b/src/core/CCByte_buffer.mli @@ -13,7 +13,7 @@ type t = { is undefined garbage. *) } (** The byte buffer. - The definition is public since NEXT_RELEASE . *) + The definition is public since 3.13.1 . *) type 'a iter = ('a -> unit) -> unit @@ -89,7 +89,7 @@ val unsafe_set : t -> int -> char -> unit val to_slice : t -> CCByte_slice.t (** [to_slice buf] returns a slice of the current content. The slice shares the same byte array as [buf] (until [buf] is resized). - @since NEXT_RELEASE *) + @since 3.13.1 *) val contents : t -> string (** Copy the internal data to a string. Allocates. *) @@ -102,7 +102,7 @@ val iter : (char -> unit) -> t -> unit val iteri : (int -> char -> unit) -> t -> unit (** Iterate with index. - @since NEXT_RELEASE *) + @since 3.13.1 *) val fold_left : ('a -> char -> 'a) -> 'a -> t -> 'a val of_iter : char iter -> t diff --git a/src/core/CCByte_slice.mli b/src/core/CCByte_slice.mli index 7b867417f..78d3f2a80 100644 --- a/src/core/CCByte_slice.mli +++ b/src/core/CCByte_slice.mli @@ -1,6 +1,6 @@ (** A simple byte slice. - @since NEXT_RELEASE *) + @since 3.13.1 *) type t = { bs: bytes; (** The bytes, potentially shared between many slices *) diff --git a/src/core/CCFun.mli b/src/core/CCFun.mli index 58c4aacce..882611012 100644 --- a/src/core/CCFun.mli +++ b/src/core/CCFun.mli @@ -8,13 +8,13 @@ include module type of Fun val and_pred : ('a -> bool) -> ('a -> bool) -> 'a -> bool (** [and_p f g x] is [(f x) && (g x)]. Produces a predicate which is a conjunction of the two predicates. - @since NEXT_RELEASE + @since 3.13.1 *) val or_pred : ('a -> bool) -> ('a -> bool) -> 'a -> bool (** [or_p f g x] is [(f x) || (g x)]. Produces a predicate which is a disjunction of the two predicates. - @since NEXT_RELEASE + @since 3.13.1 *) val compose : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c @@ -96,11 +96,11 @@ module Infix : sig val ( ||> ) : 'a * 'b -> ('a -> 'b -> 'c) -> 'c (** [x ||> f] is [f (fst x) (snd x)] - @since NEXT_RELEASE *) + @since 3.13.1 *) val ( |||> ) : 'a * 'b * 'c -> ('a -> 'b -> 'c -> 'd) -> 'd (** like [||>] but for tuples of size 3 - @since NEXT_RELEASE *) + @since 3.13.1 *) end include module type of Infix diff --git a/src/core/CCList.mli b/src/core/CCList.mli index 4f54dbb3b..b9507f77c 100644 --- a/src/core/CCList.mli +++ b/src/core/CCList.mli @@ -28,7 +28,7 @@ val cons_maybe : 'a option -> 'a t -> 'a t val cons_when : bool -> 'a -> 'a t -> 'a t (** [cons_when true x l] is [x :: l]. [cons_when false x l] is [l]. - @since NEXT_RELEASE *) + @since 3.13.1 *) val cons' : 'a t -> 'a -> 'a t (** [cons' l x] is the same as [x :: l]. This is convenient for fold diff --git a/src/core/CCListLabels.mli b/src/core/CCListLabels.mli index 48e3072d2..952d028c9 100644 --- a/src/core/CCListLabels.mli +++ b/src/core/CCListLabels.mli @@ -47,7 +47,7 @@ val cons_maybe : 'a option -> 'a t -> 'a t val cons_when : bool -> 'a -> 'a t -> 'a t (** [cons_when true x l] is [x :: l]. [cons_when false x l] is [l]. - @since NEXT_RELEASE *) + @since 3.13.1 *) val filter : f:('a -> bool) -> 'a t -> 'a t (** [filter ~f l] returns all the elements of the list [l] diff --git a/src/core/CCOption.mli b/src/core/CCOption.mli index e4915fd1f..6ee5a6ee8 100644 --- a/src/core/CCOption.mli +++ b/src/core/CCOption.mli @@ -60,7 +60,7 @@ val bind : 'a t -> ('a -> 'b t) -> 'b t val k_compose : ('a -> 'b t) -> ('b -> 'c t) -> 'a -> 'c t (** Kleisli composition. Monadic equivalent of {!CCFun.compose} - @since NEXT_RELEASE *) + @since 3.13.1 *) val map2 : ('a -> 'b -> 'c) -> 'a t -> 'b t -> 'c t (** [map2 f o1 o2] maps ['a option] and ['b option] to a ['c option] using [f]. *) @@ -100,7 +100,7 @@ val apply_or : ('a -> 'a t) -> 'a -> 'a (** [apply_or f x] returns the original [x] if [f] fails, or unwraps [f x] if it succeeds. Useful for piping preprocessing functions together (such as string processing), turning functions like "remove" into "remove_if_it_exists". - @since NEXT_RELEASE *) + @since 3.13.1 *) val value : 'a t -> default:'a -> 'a (** [value o ~default] is similar to the Stdlib's [Option.value] and to {!get_or}. @@ -187,7 +187,7 @@ module Infix : sig val ( |?> ) : 'a -> ('a -> 'a t) -> 'a (** [x |?> f] is [apply_or f x] - @since NEXT_RELEASE *) + @since 3.13.1 *) val ( let+ ) : 'a t -> ('a -> 'b) -> 'b t val ( and+ ) : 'a t -> 'b t -> ('a * 'b) t @@ -196,11 +196,11 @@ module Infix : sig val ( >=> ) : ('a -> 'b t) -> ('b -> 'c t) -> 'a -> 'c t (** Monadic [k_compose]. - @since NEXT_RELEASE *) + @since 3.13.1 *) val ( <=< ) : ('b -> 'c t) -> ('a -> 'b t) -> 'a -> 'c t (** Reverse monadic [k_compose]. - @since NEXT_RELEASE *) + @since 3.13.1 *) end include module type of Infix diff --git a/src/core/CCResult.mli b/src/core/CCResult.mli index bcd94d96c..5347b3fd6 100644 --- a/src/core/CCResult.mli +++ b/src/core/CCResult.mli @@ -100,7 +100,7 @@ val apply_or : ('a -> ('a, _) t) -> 'a -> 'a (** [apply_or f x] returns the original [x] if [f] fails, or unwraps [f x] if it succeeds. Useful for piping preprocessing functions together (such as string processing), turning functions like "remove" into "remove_if_it_exists". - @since NEXT_RELEASE *) + @since 3.13.1 *) val get_or_failwith : ('a, string) t -> 'a (** [get_or_failwith e] returns [x] if [e = Ok x], fails otherwise. @@ -123,7 +123,7 @@ val flat_map : ('a -> ('b, 'err) t) -> ('a, 'err) t -> ('b, 'err) t val k_compose : ('a -> ('b, 'err) t) -> ('b -> ('c, 'err) t) -> 'a -> ('c, 'err) t (** Kleisli composition. Monadic equivalent of {!CCFun.compose}. - @since NEXT_RELEASE *) + @since 3.13.1 *) val equal : err:'err equal -> 'a equal -> ('a, 'err) t equal val compare : err:'err ord -> 'a ord -> ('a, 'err) t ord @@ -202,7 +202,7 @@ module Infix : sig val ( |?> ) : 'a -> ('a -> ('a, _) t) -> 'a (** Alias for {!apply_or} - @since NEXT_RELEASE *) + @since 3.13.1 *) val ( let+ ) : ('a, 'e) t -> ('a -> 'b) -> ('b, 'e) t (** @since 2.8 *) @@ -219,12 +219,12 @@ module Infix : sig val ( >=> ) : ('a -> ('b, 'err) t) -> ('b -> ('c, 'err) t) -> 'a -> ('c, 'err) t (** Monadic [k_compose]. - @since NEXT_RELEASE *) + @since 3.13.1 *) val ( <=< ) : ('b -> ('c, 'err) t) -> ('a -> ('b, 'err) t) -> 'a -> ('c, 'err) t (** Reverse monadic [k_compose]. - @since NEXT_RELEASE *) + @since 3.13.1 *) end include module type of Infix diff --git a/src/core/CCVector.mli b/src/core/CCVector.mli index c8fddf6e8..a874e5c19 100644 --- a/src/core/CCVector.mli +++ b/src/core/CCVector.mli @@ -209,7 +209,7 @@ val fold : ('b -> 'a -> 'b) -> 'b -> ('a, _) t -> 'b val foldi : (int -> 'b -> 'a -> 'b) -> 'b -> ('a, _) t -> 'b (** [foldi f init v] is just like {!fold}, but it also passes in the index of each element as the first argument to the function [f]. - @since NEXT_RELEASE *) + @since 3.13.1 *) val exists : ('a -> bool) -> ('a, _) t -> bool (** Existential test (is there an element that satisfies the predicate?). *) diff --git a/src/pp/containers_pp.mli b/src/pp/containers_pp.mli index be6344194..7006fbaff 100644 --- a/src/pp/containers_pp.mli +++ b/src/pp/containers_pp.mli @@ -260,24 +260,24 @@ module Dump : sig val list : t list -> t val of_iter : ?sep:t -> ('a -> t) -> 'a iter -> t - (** @since NEXT_RELEASE *) + (** @since 3.13.1 *) val of_array : ?sep:t -> ('a -> t) -> 'a array -> t - (** @since NEXT_RELEASE *) + (** @since 3.13.1 *) val parens : t -> t - (** @since NEXT_RELEASE *) + (** @since 3.13.1 *) val braces : t -> t - (** @since NEXT_RELEASE *) + (** @since 3.13.1 *) val brackets : t -> t (** Adds '[' ']' around the term - @since NEXT_RELEASE *) + @since 3.13.1 *) val angles : t -> t (** Adds '<' '>' around the term - @since NEXT_RELEASE *) + @since 3.13.1 *) end (** Simple colors in terminals *) @@ -305,7 +305,7 @@ module Term_color : sig val style_l : style list -> t -> t end -(** @since NEXT_RELEASE *) +(** @since 3.13.1 *) module Char : sig val bang : t val at : t @@ -343,4 +343,4 @@ end val surround : ?width:int -> t -> t -> t -> t (** Generalization of {!bracket} - @since NEXT_RELEASE *) + @since 3.13.1 *) diff --git a/src/pvec/containers_pvec.mli b/src/pvec/containers_pvec.mli index 68773a2d5..2112a4d03 100644 --- a/src/pvec/containers_pvec.mli +++ b/src/pvec/containers_pvec.mli @@ -5,7 +5,7 @@ {b status: experimental} - @since NEXT_RELEASE + @since 3.13.1 *) type 'a iter = ('a -> unit) -> unit