mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2026-01-28 11:54:51 -05:00
prepare for 0.17
This commit is contained in:
parent
bb74a33385
commit
73eecfb10d
26 changed files with 120 additions and 67 deletions
|
|
@ -1,5 +1,58 @@
|
||||||
= Changelog
|
= Changelog
|
||||||
|
|
||||||
|
== 0.17
|
||||||
|
|
||||||
|
=== potentially breaking
|
||||||
|
|
||||||
|
- change the semantics of `CCString.find_all` (allow overlaps)
|
||||||
|
|
||||||
|
=== Additions
|
||||||
|
|
||||||
|
- add `CCString.pad` for more webscale
|
||||||
|
- add `(--^)` to CCRAl, CCFQueue, CCKlist (closes #56); add `CCKList.Infix`
|
||||||
|
- add monomorphic signatures in `CCInt` and `CCFloat`
|
||||||
|
- add `CCList.{sorted_insert,is_sorted}`
|
||||||
|
- add `CCLazy_list` in containers.iter (with a few functions)
|
||||||
|
- add `CCTrie.longest_prefix`
|
||||||
|
- provide additional ordering properties in `CCTrie.{above,below}`
|
||||||
|
- add `CCOpt.if_`
|
||||||
|
- have
|
||||||
|
* `CCRandom.split_list` fail on `len=0`
|
||||||
|
* `CCRandom.sample_without_replacement` fail if `n<=0`
|
||||||
|
- add `CCOpt.{for_all, exists}`
|
||||||
|
- add `CCRef.{get_then_incr,incr_then_get}`
|
||||||
|
- add `Result.{to,of}_err`
|
||||||
|
- add `CCFormat.within`
|
||||||
|
- add `map/mapi` to some of the map types.
|
||||||
|
- add `CCString.{drop,take,chop_prefix,chop_suffix,filter,filter_map}`
|
||||||
|
- add `CCList.fold_filter_map`
|
||||||
|
- add `CCIO.File.with_temp` for creating temporary files
|
||||||
|
- add `{CCArray,CCVector,CCList}.(--^)` for right-open ranges
|
||||||
|
- add `Containers.{Char,Result}`
|
||||||
|
- modify `CCPersistentHashtbl.merge` and add `CCMap.merge_safe`
|
||||||
|
- add `CCHet`, heterogeneous containers (table/map) indexed by keys
|
||||||
|
- add `CCString.rev`
|
||||||
|
- add `CCImmutArray` into containers.data
|
||||||
|
- add `CCList.Assoc.remove`
|
||||||
|
|
||||||
|
=== Fixes, misc
|
||||||
|
|
||||||
|
- Make `CCPersistentHashtbl.S.merge` more general.
|
||||||
|
- optimize KMP search in `CCString.Find` (hand-specialize code)
|
||||||
|
- bugfix in `CCFormat.to_file` (fd was closed too early)
|
||||||
|
|
||||||
|
- add a special case for pattern of length 1 in `CCString.find`
|
||||||
|
- more tests, bugfixes, and benchs for KMP in CCString
|
||||||
|
- in CCString, use KMP for faster sub-string search; add `find_all{,_l}`
|
||||||
|
|
||||||
|
others:
|
||||||
|
|
||||||
|
- `watch` target should build all
|
||||||
|
- add version constraint on sequence
|
||||||
|
- migrate to new qtest
|
||||||
|
- add an `IO` section to the tutorial
|
||||||
|
- enable `-j 0` for ocamlbuild
|
||||||
|
|
||||||
== 0.16
|
== 0.16
|
||||||
|
|
||||||
=== breaking
|
=== breaking
|
||||||
|
|
|
||||||
2
_oasis
2
_oasis
|
|
@ -1,6 +1,6 @@
|
||||||
OASISFormat: 0.4
|
OASISFormat: 0.4
|
||||||
Name: containers
|
Name: containers
|
||||||
Version: 0.16
|
Version: 0.17
|
||||||
Homepage: https://github.com/c-cube/ocaml-containers
|
Homepage: https://github.com/c-cube/ocaml-containers
|
||||||
Authors: Simon Cruanes
|
Authors: Simon Cruanes
|
||||||
License: BSD-2-clause
|
License: BSD-2-clause
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,7 @@ val (--) : int -> int -> int t
|
||||||
|
|
||||||
val (--^) : int -> int -> int t
|
val (--^) : int -> int -> int t
|
||||||
(** Range array, excluding right bound
|
(** Range array, excluding right bound
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
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
|
||||||
|
|
|
||||||
|
|
@ -79,25 +79,25 @@ val classify : float -> fpclass
|
||||||
|
|
||||||
(** {2 Infix Operators}
|
(** {2 Infix Operators}
|
||||||
|
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
module Infix : sig
|
module Infix : sig
|
||||||
val (=) : t -> t -> bool
|
val (=) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (<>) : t -> t -> bool
|
val (<>) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (<) : t -> t -> bool
|
val (<) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (>) : t -> t -> bool
|
val (>) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (<=) : t -> t -> bool
|
val (<=) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (>=) : t -> t -> bool
|
val (>=) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
end
|
end
|
||||||
|
|
||||||
include module type of Infix
|
include module type of Infix
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ val seq : ?start:string -> ?stop:string -> ?sep:string -> 'a printer -> 'a seque
|
||||||
val opt : 'a printer -> 'a option printer
|
val opt : 'a printer -> 'a option printer
|
||||||
|
|
||||||
(** In the tuple printers, the [sep] argument is only available
|
(** In the tuple printers, the [sep] argument is only available
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val pair : ?sep:string -> 'a printer -> 'b printer -> ('a * 'b) printer
|
val pair : ?sep:string -> 'a printer -> 'b printer -> ('a * 'b) printer
|
||||||
val triple : ?sep:string -> 'a printer -> 'b printer -> 'c printer -> ('a * 'b * 'c) printer
|
val triple : ?sep:string -> 'a printer -> 'b printer -> 'c printer -> ('a * 'b * 'c) printer
|
||||||
|
|
@ -49,7 +49,7 @@ val quad : ?sep:string -> 'a printer -> 'b printer ->
|
||||||
val within : string -> string -> 'a printer -> 'a printer
|
val within : string -> string -> 'a printer -> 'a printer
|
||||||
(** [within a b p] wraps [p] inside the strings [a] and [b]. Convenient,
|
(** [within a b p] wraps [p] inside the strings [a] and [b]. Convenient,
|
||||||
for instances, for brackets, parenthesis, quotes, etc.
|
for instances, for brackets, parenthesis, quotes, etc.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val map : ('a -> 'b) -> 'b printer -> 'a printer
|
val map : ('a -> 'b) -> 'b printer -> 'a printer
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -204,5 +204,5 @@ module File : sig
|
||||||
After [f] returns, the file is deleted. Best to be used in
|
After [f] returns, the file is deleted. Best to be used in
|
||||||
combination with {!with_out}.
|
combination with {!with_out}.
|
||||||
See {!Filename.temp_file}
|
See {!Filename.temp_file}
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -41,32 +41,32 @@ val of_string : string -> t option
|
||||||
(** @since 0.13 *)
|
(** @since 0.13 *)
|
||||||
|
|
||||||
val min : t -> t -> t
|
val min : t -> t -> t
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val max : t -> t -> t
|
val max : t -> t -> t
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
(** {2 Infix Operators}
|
(** {2 Infix Operators}
|
||||||
|
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
module Infix : sig
|
module Infix : sig
|
||||||
val (=) : t -> t -> bool
|
val (=) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (<>) : t -> t -> bool
|
val (<>) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (<) : t -> t -> bool
|
val (<) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (>) : t -> t -> bool
|
val (>) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (<=) : t -> t -> bool
|
val (<=) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val (>=) : t -> t -> bool
|
val (>=) : t -> t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
end
|
end
|
||||||
|
|
||||||
include module type of Infix
|
include module type of Infix
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ val fold_map2 : ('acc -> 'a -> 'b -> 'acc * 'c) -> 'acc -> 'a list -> 'b list ->
|
||||||
val fold_filter_map : ('acc -> 'a -> 'acc * 'b option) -> 'acc -> 'a list -> 'acc * 'b list
|
val fold_filter_map : ('acc -> 'a -> 'acc * 'b option) -> 'acc -> 'a list -> 'acc * 'b list
|
||||||
(** [fold_filter_map f acc l] is a [fold_left]-like function, but also
|
(** [fold_filter_map f acc l] is a [fold_left]-like function, but also
|
||||||
generates a list of output in a way similar to {!filter_map}
|
generates a list of output in a way similar to {!filter_map}
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val fold_flat_map : ('acc -> 'a -> 'acc * 'b list) -> 'acc -> 'a list -> 'acc * 'b list
|
val fold_flat_map : ('acc -> 'a -> 'acc * 'b list) -> 'acc -> 'a list -> 'acc * 'b list
|
||||||
(** [fold_flat_map f acc l] is a [fold_left]-like function, but it also maps the
|
(** [fold_flat_map f acc l] is a [fold_left]-like function, but it also maps the
|
||||||
|
|
@ -187,14 +187,14 @@ val sorted_merge_uniq : ?cmp:('a -> 'a -> int) -> 'a list -> 'a list -> 'a list
|
||||||
val is_sorted : ?cmp:('a -> 'a -> int) -> 'a list -> bool
|
val is_sorted : ?cmp:('a -> 'a -> int) -> 'a list -> bool
|
||||||
(** [is_sorted l] returns [true] iff [l] is sorted (according to given order)
|
(** [is_sorted l] returns [true] iff [l] is sorted (according to given order)
|
||||||
@param cmp the comparison function (default [Pervasives.compare])
|
@param cmp the comparison function (default [Pervasives.compare])
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val sorted_insert : ?cmp:('a -> 'a -> int) -> ?uniq:bool -> 'a -> 'a list -> 'a list
|
val sorted_insert : ?cmp:('a -> 'a -> int) -> ?uniq:bool -> 'a -> 'a list -> 'a list
|
||||||
(** [sorted_insert x l] inserts [x] into [l] such that, if [l] was sorted,
|
(** [sorted_insert x l] inserts [x] into [l] such that, if [l] was sorted,
|
||||||
then [sorted_insert x l] is sorted too.
|
then [sorted_insert x l] is sorted too.
|
||||||
@param uniq if true and [x] is already in sorted position in [l], then
|
@param uniq if true and [x] is already in sorted position in [l], then
|
||||||
[x] is not duplicated. Default [false] ([x] will be inserted in any case).
|
[x] is not duplicated. Default [false] ([x] will be inserted in any case).
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
(*$Q
|
(*$Q
|
||||||
Q.(pair small_int (list small_int)) (fun (x,l) -> \
|
Q.(pair small_int (list small_int)) (fun (x,l) -> \
|
||||||
|
|
@ -288,7 +288,7 @@ val (--) : int -> int -> int t
|
||||||
|
|
||||||
val (--^) : int -> int -> int t
|
val (--^) : int -> int -> int t
|
||||||
(** Infix alias for [range']
|
(** Infix alias for [range']
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val replicate : int -> 'a -> 'a t
|
val replicate : int -> 'a -> 'a t
|
||||||
(** Replicate the given element [n] times *)
|
(** Replicate the given element [n] times *)
|
||||||
|
|
@ -324,7 +324,7 @@ module Assoc : sig
|
||||||
|
|
||||||
val remove : ?eq:('a->'a->bool) -> ('a,'b) t -> 'a -> ('a,'b) t
|
val remove : ?eq:('a->'a->bool) -> ('a,'b) t -> 'a -> ('a,'b) t
|
||||||
(** [remove l k] removes the first occurrence of [k] from [l].
|
(** [remove l k] removes the first occurrence of [k] from [l].
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
end
|
end
|
||||||
|
|
||||||
(** {2 Zipper} *)
|
(** {2 Zipper} *)
|
||||||
|
|
@ -511,7 +511,7 @@ module Infix : sig
|
||||||
val (--) : int -> int -> int t
|
val (--) : int -> int -> int t
|
||||||
|
|
||||||
val (--^) : int -> int -> int t
|
val (--^) : int -> int -> int t
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
end
|
end
|
||||||
|
|
||||||
(** {2 IO} *)
|
(** {2 IO} *)
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ module type S = sig
|
||||||
f:(key -> [`Left of 'a | `Right of 'b | `Both of 'a * 'b] -> 'c option) ->
|
f:(key -> [`Left of 'a | `Right of 'b | `Both of 'a * 'b] -> 'c option) ->
|
||||||
'a t -> 'b t -> 'c t
|
'a t -> 'b t -> 'c t
|
||||||
(** [merge_safe ~f a b] merges the maps [a] and [b] together.
|
(** [merge_safe ~f a b] merges the maps [a] and [b] together.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val of_seq : (key * 'a) sequence -> 'a t
|
val of_seq : (key * 'a) sequence -> 'a t
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ module type S = sig
|
||||||
f:(key -> [`Left of 'a | `Right of 'b | `Both of 'a * 'b] -> 'c option) ->
|
f:(key -> [`Left of 'a | `Right of 'b | `Both of 'a * 'b] -> 'c option) ->
|
||||||
'a t -> 'b t -> 'c t
|
'a t -> 'b t -> 'c t
|
||||||
(** [merge_safe ~f a b] merges the maps [a] and [b] together.
|
(** [merge_safe ~f a b] merges the maps [a] and [b] together.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val of_seq : (key * 'a) sequence -> 'a t
|
val of_seq : (key * 'a) sequence -> 'a t
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,13 +52,13 @@ val filter : ('a -> bool) -> 'a t -> 'a t
|
||||||
|
|
||||||
val if_ : ('a -> bool) -> 'a -> 'a option
|
val if_ : ('a -> bool) -> 'a -> 'a option
|
||||||
(** [if_ f x] is [Some x] if [f x], [None] otherwise
|
(** [if_ f x] is [Some x] if [f x], [None] otherwise
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val exists : ('a -> bool) -> 'a t -> bool
|
val exists : ('a -> bool) -> 'a t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val for_all : ('a -> bool) -> 'a t -> bool
|
val for_all : ('a -> bool) -> 'a t -> bool
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val get : 'a -> 'a t -> 'a
|
val get : 'a -> 'a t -> 'a
|
||||||
(** [get default x] unwraps [x], but if [x = None] it returns [default] instead.
|
(** [get default x] unwraps [x], but if [x = None] it returns [default] instead.
|
||||||
|
|
|
||||||
|
|
@ -26,11 +26,11 @@ val update : ('a -> 'a) -> 'a t -> unit
|
||||||
|
|
||||||
val incr_then_get : int t -> int
|
val incr_then_get : int t -> int
|
||||||
(** [incr_then_get r] increments [r] and returns its new value, think [++ r]
|
(** [incr_then_get r] increments [r] and returns its new value, think [++ r]
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val get_then_incr : int t -> int
|
val get_then_incr : int t -> int
|
||||||
(** [get_then_incr r] increments [r] and returns its old value, think [r++]
|
(** [get_then_incr r] increments [r] and returns its old value, think [r++]
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val compare : 'a ord -> 'a t ord
|
val compare : 'a ord -> 'a t ord
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -184,10 +184,10 @@ val to_seq : ('a, _) t -> 'a sequence
|
||||||
type ('a, 'b) error = [`Ok of 'a | `Error of 'b]
|
type ('a, 'b) error = [`Ok of 'a | `Error of 'b]
|
||||||
|
|
||||||
val of_err : ('a, 'b) error -> ('a, 'b) t
|
val of_err : ('a, 'b) error -> ('a, 'b) t
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val to_err : ('a, 'b) t -> ('a, 'b) error
|
val to_err : ('a, 'b) t -> ('a, 'b) error
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
(** {2 IO} *)
|
(** {2 IO} *)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ val init : int -> (int -> char) -> string
|
||||||
|
|
||||||
val rev : string -> string
|
val rev : string -> string
|
||||||
(** [rev s] returns the reverse of [s]
|
(** [rev s] returns the reverse of [s]
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
(*$Q
|
(*$Q
|
||||||
Q.printable_string (fun s -> s = rev (rev s))
|
Q.printable_string (fun s -> s = rev (rev s))
|
||||||
|
|
@ -83,7 +83,7 @@ val pad : ?side:[`Left|`Right] -> ?c:char -> int -> string -> string
|
||||||
and pads it on the [side] with [c] if it's not the case.
|
and pads it on the [side] with [c] if it's not the case.
|
||||||
@param side determines where padding occurs (default: [`Left])
|
@param side determines where padding occurs (default: [`Left])
|
||||||
@param c the char used to pad (default: ' ')
|
@param c the char used to pad (default: ' ')
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
(*$= & ~printer:Q.Print.string
|
(*$= & ~printer:Q.Print.string
|
||||||
" 42" (pad 4 "42")
|
" 42" (pad 4 "42")
|
||||||
|
|
@ -128,13 +128,13 @@ val find_all : ?start:int -> sub:string -> string -> int gen
|
||||||
(** [find_all ~sub s] finds all occurrences of [sub] in [s], even overlapping
|
(** [find_all ~sub s] finds all occurrences of [sub] in [s], even overlapping
|
||||||
instances.
|
instances.
|
||||||
@param start starting position in [s]
|
@param start starting position in [s]
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val find_all_l : ?start:int -> sub:string -> string -> int list
|
val find_all_l : ?start:int -> sub:string -> string -> int list
|
||||||
(** [find_all ~sub s] finds all occurrences of [sub] in [s] and returns
|
(** [find_all ~sub s] finds all occurrences of [sub] in [s] and returns
|
||||||
them in a list
|
them in a list
|
||||||
@param start starting position in [s]
|
@param start starting position in [s]
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
(*$= & ~printer:Q.Print.(list int)
|
(*$= & ~printer:Q.Print.(list int)
|
||||||
[1; 6] (find_all_l ~sub:"bc" "abc aabc aab")
|
[1; 6] (find_all_l ~sub:"bc" "abc aabc aab")
|
||||||
|
|
@ -222,7 +222,7 @@ val suffix : suf:string -> string -> bool
|
||||||
val chop_prefix : pre:string -> string -> string option
|
val chop_prefix : pre:string -> string -> string option
|
||||||
(** [chop_pref ~pre s] removes [pre] from [s] if [pre] really is a prefix
|
(** [chop_pref ~pre s] removes [pre] from [s] if [pre] really is a prefix
|
||||||
of [s], returns [None] otherwise
|
of [s], returns [None] otherwise
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
(*$= & ~printer:Q.Print.(option string)
|
(*$= & ~printer:Q.Print.(option string)
|
||||||
(Some "cd") (chop_prefix ~pre:"aab" "aabcd")
|
(Some "cd") (chop_prefix ~pre:"aab" "aabcd")
|
||||||
|
|
@ -233,7 +233,7 @@ val chop_prefix : pre:string -> string -> string option
|
||||||
val chop_suffix : suf:string -> string -> string option
|
val chop_suffix : suf:string -> string -> string option
|
||||||
(** [chop_suffix ~suf s] removes [suf] from [s] if [suf] really is a suffix
|
(** [chop_suffix ~suf s] removes [suf] from [s] if [suf] really is a suffix
|
||||||
of [s], returns [None] otherwise
|
of [s], returns [None] otherwise
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
(*$= & ~printer:Q.Print.(option string)
|
(*$= & ~printer:Q.Print.(option string)
|
||||||
(Some "ab") (chop_suffix ~suf:"cd" "abcd")
|
(Some "ab") (chop_suffix ~suf:"cd" "abcd")
|
||||||
|
|
@ -243,15 +243,15 @@ val chop_suffix : suf:string -> string -> string option
|
||||||
|
|
||||||
val take : int -> string -> string
|
val take : int -> string -> string
|
||||||
(** [take n s] keeps only the [n] first chars of [s]
|
(** [take n s] keeps only the [n] first chars of [s]
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val drop : int -> string -> string
|
val drop : int -> string -> string
|
||||||
(** [drop n s] removes the [n] first chars of [s]
|
(** [drop n s] removes the [n] first chars of [s]
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val take_drop : int -> string -> string * string
|
val take_drop : int -> string -> string * string
|
||||||
(** [take_drop n s = take n s, drop n s]
|
(** [take_drop n s = take n s, drop n s]
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
(*$=
|
(*$=
|
||||||
("ab", "cd") (take_drop 2 "abcd")
|
("ab", "cd") (take_drop 2 "abcd")
|
||||||
|
|
@ -313,7 +313,7 @@ val mapi : (int -> char -> char) -> string -> string
|
||||||
@since 0.12 *)
|
@since 0.12 *)
|
||||||
|
|
||||||
val filter_map : (char -> char option) -> string -> string
|
val filter_map : (char -> char option) -> string -> string
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
(*$= & ~printer:Q.Print.string
|
(*$= & ~printer:Q.Print.string
|
||||||
"bcef" (filter_map \
|
"bcef" (filter_map \
|
||||||
|
|
@ -321,7 +321,7 @@ val filter_map : (char -> char option) -> string -> string
|
||||||
*)
|
*)
|
||||||
|
|
||||||
val filter : (char -> bool) -> string -> string
|
val filter : (char -> bool) -> string -> string
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
(*$= & ~printer:Q.Print.string
|
(*$= & ~printer:Q.Print.string
|
||||||
"abde" (filter (function 'c' -> false | _ -> true) "abcdec")
|
"abde" (filter (function 'c' -> false | _ -> true) "abcdec")
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ val (--) : int -> int -> (int, 'mut) t
|
||||||
val (--^) : int -> int -> (int, 'mut) t
|
val (--^) : int -> int -> (int, 'mut) t
|
||||||
(** Range of integers, either ascending or descending, but excluding right.,
|
(** Range of integers, either ascending or descending, but excluding right.,
|
||||||
Example: [1 --^ 10] returns the vector [[1;2;3;4;5;6;7;8;9]]
|
Example: [1 --^ 10] returns the vector [[1;2;3;4;5;6;7;8;9]]
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val of_array : 'a array -> ('a, 'mut) t
|
val of_array : 'a array -> ('a, 'mut) t
|
||||||
val of_list : 'a list -> ('a, 'mut) t
|
val of_list : 'a list -> ('a, 'mut) t
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ module Char = struct
|
||||||
include Char
|
include Char
|
||||||
include (CCChar : module type of CCChar with type t := t)
|
include (CCChar : module type of CCChar with type t := t)
|
||||||
end
|
end
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
module Result = CCResult
|
module Result = CCResult
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ val (--) : int -> int -> int t
|
||||||
|
|
||||||
val (--^) : int -> int -> int t
|
val (--^) : int -> int -> int t
|
||||||
(** [a -- b] is the integer range from [a] to [b], where [b] is excluded.
|
(** [a -- b] is the integer range from [a] to [b], where [b] is excluded.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val print : 'a printer -> 'a t printer
|
val print : 'a printer -> 'a t printer
|
||||||
(** @since 0.13 *)
|
(** @since 0.13 *)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
This is similar to {!CCMixtbl}, but the injection is directly used as
|
This is similar to {!CCMixtbl}, but the injection is directly used as
|
||||||
a key.
|
a key.
|
||||||
|
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
type 'a sequence = ('a -> unit) -> unit
|
type 'a sequence = ('a -> unit) -> unit
|
||||||
type 'a gen = unit -> 'a option
|
type 'a gen = unit -> 'a option
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
Sadly, it is not possible to make this type covariant without using black
|
Sadly, it is not possible to make this type covariant without using black
|
||||||
magic.
|
magic.
|
||||||
|
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
type 'a t
|
type 'a t
|
||||||
(** Array of values of type 'a. The underlying type really is
|
(** Array of values of type 'a. The underlying type really is
|
||||||
|
|
|
||||||
|
|
@ -67,10 +67,10 @@ val iter : (int -> 'a -> unit) -> 'a t -> unit
|
||||||
val fold : (int -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
|
val fold : (int -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
|
||||||
|
|
||||||
val mapi : (int -> 'a -> 'b) -> 'a t -> 'b t
|
val mapi : (int -> 'a -> 'b) -> 'a t -> 'b t
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val map : ('a -> 'b) -> 'a t -> 'b t
|
val map : ('a -> 'b) -> 'a t -> 'b t
|
||||||
(** @since NEXT_RELEASE *)
|
(** @since 0.17 *)
|
||||||
|
|
||||||
val choose : 'a t -> (int * 'a) option
|
val choose : 'a t -> (int * 'a) option
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ module Infix : sig
|
||||||
|
|
||||||
val (--^) : int -> int -> int t
|
val (--^) : int -> int -> int t
|
||||||
(** [a -- b] is the integer range from [a] to [b], where [b] is excluded.
|
(** [a -- b] is the integer range from [a] to [b], where [b] is excluded.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
end
|
end
|
||||||
|
|
||||||
include module type of Infix
|
include module type of Infix
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ module type S = sig
|
||||||
Example: if [m] has keys "abc0" and "abcd", then [longest_prefix "abc2" m]
|
Example: if [m] has keys "abc0" and "abcd", then [longest_prefix "abc2" m]
|
||||||
will return "abc"
|
will return "abc"
|
||||||
|
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val update : key -> ('a option -> 'a option) -> 'a t -> 'a t
|
val update : key -> ('a option -> 'a option) -> 'a t -> 'a t
|
||||||
(** Update the binding for the given key. The function is given
|
(** Update the binding for the given key. The function is given
|
||||||
|
|
@ -65,11 +65,11 @@ module type S = sig
|
||||||
|
|
||||||
val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t
|
val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t
|
||||||
(** Map values, giving both key and value. Will use {!WORD.of_list} to rebuild keys.
|
(** Map values, giving both key and value. Will use {!WORD.of_list} to rebuild keys.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val map : ('a -> 'b) -> 'a t -> 'b t
|
val map : ('a -> 'b) -> 'a t -> 'b t
|
||||||
(** Map values, giving only the value.
|
(** Map values, giving only the value.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val iter : (key -> 'a -> unit) -> 'a t -> unit
|
val iter : (key -> 'a -> unit) -> 'a t -> unit
|
||||||
(** Same as {!fold}, but for effectful functions *)
|
(** Same as {!fold}, but for effectful functions *)
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ module type S = sig
|
||||||
Example: if [m] has keys "abc0" and "abcd", then [longest_prefix "abc2" m]
|
Example: if [m] has keys "abc0" and "abcd", then [longest_prefix "abc2" m]
|
||||||
will return "abc"
|
will return "abc"
|
||||||
|
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val update : key -> ('a option -> 'a option) -> 'a t -> 'a t
|
val update : key -> ('a option -> 'a option) -> 'a t -> 'a t
|
||||||
(** Update the binding for the given key. The function is given
|
(** Update the binding for the given key. The function is given
|
||||||
|
|
@ -65,11 +65,11 @@ module type S = sig
|
||||||
|
|
||||||
val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t
|
val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t
|
||||||
(** Map values, giving both key and value. Will use {!WORD.of_list} to rebuild keys.
|
(** Map values, giving both key and value. Will use {!WORD.of_list} to rebuild keys.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val map : ('a -> 'b) -> 'a t -> 'b t
|
val map : ('a -> 'b) -> 'a t -> 'b t
|
||||||
(** Map values, giving only the value.
|
(** Map values, giving only the value.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
val iter : (key -> 'a -> unit) -> 'a t -> unit
|
val iter : (key -> 'a -> unit) -> 'a t -> unit
|
||||||
(** Same as {!fold}, but for effectful functions *)
|
(** Same as {!fold}, but for effectful functions *)
|
||||||
|
|
|
||||||
|
|
@ -64,12 +64,12 @@ module type S = sig
|
||||||
|
|
||||||
val mapi : f:(key -> 'a -> 'b) -> 'a t -> 'b t
|
val mapi : f:(key -> 'a -> 'b) -> 'a t -> 'b t
|
||||||
(** Map values, giving both key and value. Will use {!WORD.of_list} to rebuild keys.
|
(** Map values, giving both key and value. Will use {!WORD.of_list} to rebuild keys.
|
||||||
@since NEXT_RELEASE
|
@since 0.17
|
||||||
*)
|
*)
|
||||||
|
|
||||||
val map : f:('a -> 'b) -> 'a t -> 'b t
|
val map : f:('a -> 'b) -> 'a t -> 'b t
|
||||||
(** Map values, giving only the value.
|
(** Map values, giving only the value.
|
||||||
@since NEXT_RELEASE
|
@since 0.17
|
||||||
*)
|
*)
|
||||||
|
|
||||||
val iter : f:(key -> 'a -> unit) -> 'a t -> unit
|
val iter : f:(key -> 'a -> unit) -> 'a t -> unit
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@ val (--) : int -> int -> int t
|
||||||
|
|
||||||
val (--^) : int -> int -> int t
|
val (--^) : int -> int -> int t
|
||||||
(** [a -- b] is the integer range from [a] to [b], where [b] is excluded.
|
(** [a -- b] is the integer range from [a] to [b], where [b] is excluded.
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
(** {2 Operations on two Collections} *)
|
(** {2 Operations on two Collections} *)
|
||||||
|
|
||||||
|
|
@ -212,7 +212,7 @@ val (<.>) : ('a -> 'b) t -> 'a t -> 'b t
|
||||||
|
|
||||||
(** {2 Infix operators}
|
(** {2 Infix operators}
|
||||||
|
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
module Infix : sig
|
module Infix : sig
|
||||||
val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
|
val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
(** {1 Lazy List}
|
(** {1 Lazy List}
|
||||||
|
|
||||||
@since NEXT_RELEASE *)
|
@since 0.17 *)
|
||||||
|
|
||||||
type +'a t = 'a node lazy_t
|
type +'a t = 'a node lazy_t
|
||||||
and +'a node =
|
and +'a node =
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue