mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-07 11:45:31 -05:00
add many missing functions to CCListLabels
This commit is contained in:
parent
fac9f18031
commit
33d3ee114c
2 changed files with 61 additions and 7 deletions
|
|
@ -1592,3 +1592,4 @@ let pp ?(start="") ?(stop="") ?(sep=", ") pp_item fmt l =
|
||||||
(CCFormat.hbox(CCList.pp ~start:"[" ~stop:"]" CCFormat.int)) \
|
(CCFormat.hbox(CCList.pp ~start:"[" ~stop:"]" CCFormat.int)) \
|
||||||
[1;2;3])
|
[1;2;3])
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,12 @@
|
||||||
|
|
||||||
(** {1 Complements to list} *)
|
(** {1 Complements to list} *)
|
||||||
|
|
||||||
|
type 'a sequence = ('a -> unit) -> unit
|
||||||
|
type 'a gen = unit -> 'a option
|
||||||
|
type 'a klist = unit -> [`Nil | `Cons of 'a * 'a klist]
|
||||||
|
type 'a printer = Format.formatter -> 'a -> unit
|
||||||
|
type 'a random_gen = Random.State.t -> 'a
|
||||||
|
|
||||||
include module type of ListLabels
|
include module type of ListLabels
|
||||||
|
|
||||||
type 'a t = 'a list
|
type 'a t = 'a list
|
||||||
|
|
@ -59,6 +65,9 @@ val fold_map : f:('acc -> 'a -> 'acc * 'b) -> init:'acc -> 'a list -> 'acc * 'b
|
||||||
list to another list.
|
list to another list.
|
||||||
@since 0.14 *)
|
@since 0.14 *)
|
||||||
|
|
||||||
|
val scan_left : f:('acc -> 'a -> 'acc) -> init:'acc -> 'a list -> 'acc list
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val fold_map2 : f:('acc -> 'a -> 'b -> 'acc * 'c) -> init:'acc -> 'a list -> 'b list -> 'acc * 'c list
|
val fold_map2 : f:('acc -> 'a -> 'b -> 'acc * 'c) -> init:'acc -> 'a list -> 'b list -> 'acc * 'c list
|
||||||
(** [fold_map2] is to [fold_map] what [List.map2] is to [List.map].
|
(** [fold_map2] is to [fold_map] what [List.map2] is to [List.map].
|
||||||
@raise Invalid_argument if the lists do not have the same length.
|
@raise Invalid_argument if the lists do not have the same length.
|
||||||
|
|
@ -74,13 +83,31 @@ val fold_flat_map : f:('acc -> 'a -> 'acc * 'b list) -> init:'acc -> 'a list ->
|
||||||
list to a list of lists that is then [flatten]'d.
|
list to a list of lists that is then [flatten]'d.
|
||||||
@since 0.14 *)
|
@since 0.14 *)
|
||||||
|
|
||||||
|
val count : f:('a -> bool) -> 'a list -> int
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val init : int -> f:(int -> 'a) -> 'a t
|
val init : int -> f:(int -> 'a) -> 'a t
|
||||||
(** [init len ~f] is [f 0; f 1; ...; f (len-1)].
|
(** [init len ~f] is [f 0; f 1; ...; f (len-1)].
|
||||||
@raise Invalid_argument if len < 0.
|
@raise Invalid_argument if len < 0.
|
||||||
@since 0.6 *)
|
@since 0.6 *)
|
||||||
|
|
||||||
|
val combine : 'a list -> 'b list -> ('a * 'b) list
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val combine_gen : 'a list -> 'b list -> ('a * 'b) gen
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val split : ('a * 'b) t -> 'a t * 'b t
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int
|
val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int
|
||||||
|
|
||||||
|
val compare_lengths : 'a t -> 'b t -> int
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val compare_length_with : 'a t -> int -> int
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool
|
val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool
|
||||||
|
|
||||||
val flat_map : f:('a -> 'b t) -> 'a t -> 'b t
|
val flat_map : f:('a -> 'b t) -> 'a t -> 'b t
|
||||||
|
|
@ -95,6 +122,11 @@ val product : f:('a -> 'b -> 'c) -> 'a t -> 'b t -> 'c t
|
||||||
val fold_product : f:('c -> 'a -> 'b -> 'c) -> init:'c -> 'a t -> 'b t -> 'c
|
val fold_product : f:('c -> 'a -> 'b -> 'c) -> init:'c -> 'a t -> 'b t -> 'c
|
||||||
(** Fold on the cartesian product. *)
|
(** Fold on the cartesian product. *)
|
||||||
|
|
||||||
|
val cartesian_product : 'a t t -> 'a t t
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val map_product_l : f:('a -> 'b list) -> 'a list -> 'b list list
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
val diagonal : 'a t -> ('a * 'a) t
|
val diagonal : 'a t -> ('a * 'a) t
|
||||||
(** All pairs of distinct positions of the list. [list_diagonal l] will
|
(** All pairs of distinct positions of the list. [list_diagonal l] will
|
||||||
return the list of [List.nth i l, List.nth j l] if [i < j]. *)
|
return the list of [List.nth i l, List.nth j l] if [i < j]. *)
|
||||||
|
|
@ -121,7 +153,7 @@ val sublists_of_len :
|
||||||
|
|
||||||
@since 1.5 *)
|
@since 1.5 *)
|
||||||
|
|
||||||
val intersperse : 'a -> 'a list -> 'a list
|
val intersperse : x:'a -> 'a list -> 'a list
|
||||||
(** Insert the first argument between every element of the list.
|
(** Insert the first argument between every element of the list.
|
||||||
@since NEXT_RELEASE *)
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
|
@ -168,6 +200,9 @@ val drop_while : f:('a -> bool) -> 'a t -> 'a t
|
||||||
(** [drop_while ~f l] drops the longest prefix of [l] for which [f] is [true].
|
(** [drop_while ~f l] drops the longest prefix of [l] for which [f] is [true].
|
||||||
@since 0.13 *)
|
@since 0.13 *)
|
||||||
|
|
||||||
|
val take_drop_while : f:('a -> bool) -> 'a t -> 'a t * 'a t
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val last : int -> 'a t -> 'a t
|
val last : int -> 'a t -> 'a t
|
||||||
(** [last n l] takes the last [n] elements of [l] (or less if
|
(** [last n l] takes the last [n] elements of [l] (or less if
|
||||||
[l] doesn't have that many elements). *)
|
[l] doesn't have that many elements). *)
|
||||||
|
|
@ -189,6 +224,9 @@ val find_pred : f:('a -> bool) -> 'a t -> 'a option
|
||||||
or returns [None] if no element satisfies [p].
|
or returns [None] if no element satisfies [p].
|
||||||
@since 0.11 *)
|
@since 0.11 *)
|
||||||
|
|
||||||
|
val find_opt : f:('a -> bool) -> 'a t -> 'a option
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val find_pred_exn : f:('a -> bool) -> 'a t -> 'a
|
val find_pred_exn : f:('a -> bool) -> 'a t -> 'a
|
||||||
(** Unsafe version of {!find_pred}.
|
(** Unsafe version of {!find_pred}.
|
||||||
@raise Not_found if no such element is found.
|
@raise Not_found if no such element is found.
|
||||||
|
|
@ -218,6 +256,18 @@ val filter_map : f:('a -> 'b option) -> 'a t -> 'b t
|
||||||
[f] returns [Some e].
|
[f] returns [Some e].
|
||||||
Map and remove elements at the same time. *)
|
Map and remove elements at the same time. *)
|
||||||
|
|
||||||
|
val keep_some : 'a option t -> 'a t
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val keep_ok : ('a, _) Result.result t -> 'a t
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val all_some : 'a option t -> 'a t option
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val all_ok : ('a, 'err) Result.result t -> ('a t, 'err) Result.result
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val sorted_merge : cmp:('a -> 'a -> int) -> 'a list -> 'a list -> 'a list
|
val sorted_merge : cmp:('a -> 'a -> int) -> 'a list -> 'a list -> 'a list
|
||||||
(** Merges elements from both sorted list. *)
|
(** Merges elements from both sorted list. *)
|
||||||
|
|
||||||
|
|
@ -265,14 +315,23 @@ val iteri : f:(int -> 'a -> unit) -> 'a t -> unit
|
||||||
the element as first argument (counting from 0), and the element
|
the element as first argument (counting from 0), and the element
|
||||||
itself as second argument. *)
|
itself as second argument. *)
|
||||||
|
|
||||||
|
val iteri2 : f:(int -> 'a -> 'b -> unit) -> 'a t -> 'b t -> unit
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val foldi : f:('b -> int -> 'a -> 'b) -> init:'b -> 'a t -> 'b
|
val foldi : f:('b -> int -> 'a -> 'b) -> init:'b -> 'a t -> 'b
|
||||||
(** Like [fold] but it also passes in the index of each element to the folded function. Tail-recursive. *)
|
(** Like [fold] but it also passes in the index of each element to the folded function. Tail-recursive. *)
|
||||||
|
|
||||||
|
val foldi2 : f:('c -> int -> 'a -> 'b -> 'c) -> init:'c -> 'a t -> 'b t -> 'c
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val get_at_idx : int -> 'a t -> 'a option
|
val get_at_idx : int -> 'a t -> 'a option
|
||||||
(** Get by index in the list.
|
(** Get by index in the list.
|
||||||
If the index is negative, it will get element starting from the end
|
If the index is negative, it will get element starting from the end
|
||||||
of the list. *)
|
of the list. *)
|
||||||
|
|
||||||
|
val nth_opt : 'a t -> int -> 'a option
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val get_at_idx_exn : int -> 'a t -> 'a
|
val get_at_idx_exn : int -> 'a t -> 'a
|
||||||
(** Get the i-th element, or
|
(** Get the i-th element, or
|
||||||
@raise Not_found if the index is invalid.
|
@raise Not_found if the index is invalid.
|
||||||
|
|
@ -463,12 +522,6 @@ end
|
||||||
|
|
||||||
(** {2 Conversions} *)
|
(** {2 Conversions} *)
|
||||||
|
|
||||||
type 'a sequence = ('a -> unit) -> unit
|
|
||||||
type 'a gen = unit -> 'a option
|
|
||||||
type 'a klist = unit -> [`Nil | `Cons of 'a * 'a klist]
|
|
||||||
type 'a printer = Format.formatter -> 'a -> unit
|
|
||||||
type 'a random_gen = Random.State.t -> 'a
|
|
||||||
|
|
||||||
val random : 'a random_gen -> 'a t random_gen
|
val random : 'a random_gen -> 'a t random_gen
|
||||||
val random_non_empty : 'a random_gen -> 'a t random_gen
|
val random_non_empty : 'a random_gen -> 'a t random_gen
|
||||||
val random_len : int -> 'a random_gen -> 'a t random_gen
|
val random_len : int -> 'a random_gen -> 'a t random_gen
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue