package GT

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Module HelpersBase.ListSource

include module type of struct include Base.List end
Sourcetype 'a t = 'a list
Sourceval compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int
Sourceval globalize : ('a -> 'a) -> 'a t -> 'a t
Sourceval hash_fold_t : (Base.Hash.state -> 'a -> Base.Hash.state) -> Base.Hash.state -> 'a t -> Base.Hash.state
include Sexplib0.Sexpable.S1 with type 'a t := 'a t
Sourceval t_of_sexp : (Sexplib0__.Sexp.t -> 'a) -> Sexplib0__.Sexp.t -> 'a t
Sourceval sexp_of_t : ('a -> Sexplib0__.Sexp.t) -> 'a t -> Sexplib0__.Sexp.t
include Base.Indexed_container.S1_with_creators with type 'a t := 'a t
include Base.Container.S1_with_creators with type 'a t := 'a t
Sourceval of_list : 'a list -> 'a t
Sourceval of_array : 'a array -> 'a t
Sourceval append : 'a t -> 'a t -> 'a t

E.g., append (of_list [1; 2]) (of_list [3; 4; 5]) is of_list [1; 2; 3; 4; 5]

Sourceval concat : 'a t t -> 'a t

Concatenates a nested container. The elements of the inner containers are concatenated together in order to give the result.

Sourceval filter : 'a t -> f:('a -> bool) -> 'a t

filter t ~f returns all the elements of t that satisfy the predicate f.

Sourceval partition_tf : 'a t -> f:('a -> bool) -> 'a t * 'a t

partition_tf t ~f returns a pair t1, t2, where t1 is all elements of t that satisfy f, and t2 is all elements of t that do not satisfy f. The "tf" suffix is mnemonic to remind readers that the result is (trues, falses).

Sourceval partition_map : 'a t -> f:('a -> ('b, 'c) Base__.Either0.t) -> 'b t * 'c t

partition_map t ~f partitions t according to f.

include Base.Container.S1 with type 'a t := 'a t
Sourceval mem : 'a t -> 'a -> equal:('a -> 'a -> bool) -> bool

Checks whether the provided element is there, using equal.

Sourceval length : 'a t -> int
Sourceval is_empty : 'a t -> bool
Sourceval iter : 'a t -> f:('a -> unit) -> unit
Sourceval fold : 'a t -> init:'acc -> f:('acc -> 'a -> 'acc) -> 'acc

fold t ~init ~f returns f (... f (f (f init e1) e2) e3 ...) en, where e1..en are the elements of t

Sourceval fold_result : 'a t -> init:'acc -> f:('acc -> 'a -> ('acc, 'e) Base.Result.t) -> ('acc, 'e) Base.Result.t

fold_result t ~init ~f is a short-circuiting version of fold that runs in the Result monad. If f returns an Error _, that value is returned without any additional invocations of f.

Sourceval fold_until : 'a t -> init:'acc -> f:('acc -> 'a -> ('acc, 'final) Base.Container.Continue_or_stop.t) -> finish:('acc -> 'final) -> 'final

fold_until t ~init ~f ~finish is a short-circuiting version of fold. If f returns Stop _ the computation ceases and results in that value. If f returns Continue _, the fold will proceed. If f never returns Stop _, the final result is computed by finish.

Example:

  type maybe_negative =
    | Found_negative of int
    | All_nonnegative of { sum : int }

  (** [first_neg_or_sum list] returns the first negative number in [list], if any,
      otherwise returns the sum of the list. *)
  let first_neg_or_sum =
    List.fold_until ~init:0
      ~f:(fun sum x ->
        if x < 0
        then Stop (Found_negative x)
        else Continue (sum + x))
      ~finish:(fun sum -> All_nonnegative { sum })
  ;;

  let x = first_neg_or_sum [1; 2; 3; 4; 5]
  val x : maybe_negative = All_nonnegative {sum = 15}

  let y = first_neg_or_sum [1; 2; -3; 4; 5]
  val y : maybe_negative = Found_negative -3
Sourceval exists : 'a t -> f:('a -> bool) -> bool

Returns true if and only if there exists an element for which the provided function evaluates to true. This is a short-circuiting operation.

Sourceval for_all : 'a t -> f:('a -> bool) -> bool

Returns true if and only if the provided function evaluates to true for all elements. This is a short-circuiting operation.

Sourceval count : 'a t -> f:('a -> bool) -> int

Returns the number of elements for which the provided function evaluates to true.

Sourceval sum : (module Base.Container.Summable with type t = 'sum) -> 'a t -> f:('a -> 'sum) -> 'sum

Returns the sum of f i for all i in the container.

Sourceval find : 'a t -> f:('a -> bool) -> 'a option

Returns as an option the first element for which f evaluates to true.

Sourceval find_map : 'a t -> f:('a -> 'b option) -> 'b option

Returns the first evaluation of f that returns Some, and returns None if there is no such element.

Sourceval to_list : 'a t -> 'a list
Sourceval to_array : 'a t -> 'a array
Sourceval min_elt : 'a t -> compare:('a -> 'a -> int) -> 'a option

Returns a minimum (resp maximum) element from the collection using the provided compare function, or None if the collection is empty. In case of a tie, the first element encountered while traversing the collection is returned. The implementation uses fold so it has the same complexity as fold.

Sourceval max_elt : 'a t -> compare:('a -> 'a -> int) -> 'a option

These are all like their equivalents in Container except that an index starting at 0 is added as the first argument to f.

Sourceval foldi : 'a t -> init:_ -> f:(int -> _ -> 'a -> _) -> _
Sourceval iteri : 'a t -> f:(int -> 'a -> unit) -> unit
Sourceval existsi : 'a t -> f:(int -> 'a -> bool) -> bool
Sourceval for_alli : 'a t -> f:(int -> 'a -> bool) -> bool
Sourceval counti : 'a t -> f:(int -> 'a -> bool) -> int
Sourceval findi : 'a t -> f:(int -> 'a -> bool) -> (int * 'a) option
Sourceval find_mapi : 'a t -> f:(int -> 'a -> 'b option) -> 'b option
Sourceval init : int -> f:(int -> 'a) -> 'a t

init n ~f is equivalent to of_list [f 0; f 1; ...; f (n-1)]. It raises an exception if n < 0.

Sourceval mapi : 'a t -> f:(int -> 'a -> 'b) -> 'b t

mapi is like map. Additionally, it passes in the index of each element as the first argument to the mapped function.

Sourceval filteri : 'a t -> f:(int -> 'a -> bool) -> 'a t
Sourceval filter_mapi : 'a t -> f:(int -> 'a -> 'b option) -> 'b t

filter_mapi is like filter_map. Additionally, it passes in the index of each element as the first argument to the mapped function.

Sourceval concat_mapi : 'a t -> f:(int -> 'a -> 'b t) -> 'b t

concat_mapi t ~f is like concat_map. Additionally, it passes the index as an argument.

Sourceval invariant : ('a -> unit) -> 'a t -> unit
Sourcemodule Cartesian_product = Base.List.Cartesian_product

Implements cartesian-product behavior for map and bind. *

The monad portion of Cartesian_product is re-exported at top level.

include Base.Monad.S_local with type 'a t := 'a t
Sourceval (>>=) : 'a t -> ('a -> 'b t) -> 'b t

t >>= f returns a computation that sequences the computations represented by two monad elements. The resulting computation first does t to yield a value v, and then runs the computation returned by f v.

Sourceval (>>|) : 'a t -> ('a -> 'b) -> 'b t

t >>| f is t >>= (fun a -> return (f a)).

Sourcemodule Monad_infix = Base.List.Monad_infix
Sourceval bind : 'a t -> f:('a -> 'b t) -> 'b t

bind t ~f = t >>= f

Sourceval return : 'a -> 'a t

return v returns the (trivial) computation that returns v.

Sourceval map : 'a t -> f:('a -> 'b) -> 'b t

map t ~f is t >>| f.

Sourceval join : 'a t t -> 'a t

join t is t >>= (fun t' -> t').

Sourceval ignore_m : 'a t -> unit t

ignore_m t is map t ~f:(fun _ -> ()). ignore_m used to be called ignore, but we decided that was a bad name, because it shadowed the widely used Stdlib.ignore. Some monads still do let ignore = ignore_m for historical reasons.

Sourceval all : 'a t list -> 'a list t
Sourceval all_unit : unit t list -> unit t

Like all, but ensures that every monadic value in the list produces a unit value, all of which are discarded rather than being collected into a list.

Sourcemodule Let_syntax = Base.List.Let_syntax
Sourcemodule Or_unequal_lengths = Base.List.Or_unequal_lengths

Or_unequal_lengths is used for functions that take multiple lists and that only make sense if all the lists have the same length, e.g., iter2, map3. Such functions check the list lengths prior to doing anything else, and return Unequal_lengths if not all the lists have the same length.

Sourceval nth : 'a t -> int -> 'a option
Sourceval nth_exn : 'a t -> int -> 'a

Return the n-th element of the given list. The first element (head of the list) is at position 0. Raise if the list is too short or n is negative.

Sourceval rev : 'a t -> 'a t

List reversal.

Sourceval rev_append : 'a t -> 'a t -> 'a t

rev_append l1 l2 reverses l1 and concatenates it to l2. This is equivalent to (List.rev l1) @ l2, but rev_append is more efficient.

Sourceval unordered_append : 'a t -> 'a t -> 'a t

unordered_append l1 l2 has the same elements as l1 @ l2, but in some unspecified order. Generally takes time proportional to length of first list, but is O(1) if either list is empty.

Sourceval rev_map : 'a t -> f:('a -> 'b) -> 'b t

rev_map l ~f gives the same result as List.rev (ListLabels.map f l), but is more efficient.

Sourceval iter2_exn : 'a t -> 'b t -> f:('a -> 'b -> unit) -> unit

iter2 [a1; ...; an] [b1; ...; bn] ~f calls in turn f a1 b1; ...; f an bn. The exn version will raise if the two lists have different lengths.

Sourceval iter2 : 'a t -> 'b t -> f:('a -> 'b -> unit) -> unit Or_unequal_lengths.t
Sourceval rev_map2_exn : 'a t -> 'b t -> f:('a -> 'b -> 'c) -> 'c t

rev_map2_exn l1 l2 ~f gives the same result as List.rev (List.map2_exn l1 l2 ~f), but is more efficient.

Sourceval rev_map2 : 'a t -> 'b t -> f:('a -> 'b -> 'c) -> 'c t Or_unequal_lengths.t
Sourceval fold2_exn : 'a t -> 'b t -> init:'acc -> f:('acc -> 'a -> 'b -> 'acc) -> 'acc

fold2 ~f ~init:a [b1; ...; bn] [c1; ...; cn] is f (... (f (f a b1 c1) b2 c2) ...) bn cn. The exn version will raise if the two lists have different lengths.

Sourceval fold2 : 'a t -> 'b t -> init:'acc -> f:('acc -> 'a -> 'b -> 'acc) -> 'acc Or_unequal_lengths.t
Sourceval fold_right2_exn : 'a t -> 'b t -> f:('a -> 'b -> 'acc -> 'acc) -> init:'acc -> 'acc

fold_right2 ~f [a1; ...; an] [b1; ...; bn] ~init:c is f a1 b1 (f a2 b2 (... (f an bn c) ...)). The exn version will raise if the two lists have different lengths.

Sourceval fold_right2 : 'a t -> 'b t -> f:('a -> 'b -> 'acc -> 'acc) -> init:'acc -> 'acc Or_unequal_lengths.t
Sourceval for_all2_exn : 'a t -> 'b t -> f:('a -> 'b -> bool) -> bool

Like List.for_all, but for a two-argument predicate. The exn version will raise if the two lists have different lengths.

Sourceval for_all2 : 'a t -> 'b t -> f:('a -> 'b -> bool) -> bool Or_unequal_lengths.t
Sourceval exists2_exn : 'a t -> 'b t -> f:('a -> 'b -> bool) -> bool

Like List.exists, but for a two-argument predicate. The exn version will raise if the two lists have different lengths.

Sourceval exists2 : 'a t -> 'b t -> f:('a -> 'b -> bool) -> bool Or_unequal_lengths.t
Sourceval rev_filter : 'a t -> f:('a -> bool) -> 'a t

Like filter, but reverses the order of the input list.

Sourceval partition3_map : 'a t -> f:('a -> [ `Fst of 'b | `Snd of 'c | `Trd of 'd ]) -> 'b t * 'c t * 'd t
Sourceval partition_result : ('ok, 'error) Base.Result.t t -> 'ok t * 'error t

partition_result l returns a pair of lists (l1, l2), where l1 is the list of all Ok elements in l and l2 is the list of all Error elements. The order of elements in the input list is preserved.

Sourceval split_n : 'a t -> int -> 'a t * 'a t

split_n [e1; ...; em] n is ([e1; ...; en], [en+1; ...; em]).

  • If n > m, ([e1; ...; em], []) is returned.
  • If n < 0, ([], [e1; ...; em]) is returned.
Sourceval sort : 'a t -> compare:('a -> 'a -> int) -> 'a t

Sort a list in increasing order according to a comparison function. The comparison function must return 0 if its arguments compare as equal, a positive integer if the first is greater, and a negative integer if the first is smaller (see Array.sort for a complete specification). For example, Poly.compare is a suitable comparison function.

The current implementation uses Merge Sort. It runs in linear heap space and logarithmic stack space.

Presently, the sort is stable, meaning that two equal elements in the input will be in the same order in the output.

Sourceval stable_sort : 'a t -> compare:('a -> 'a -> int) -> 'a t

Like sort, but guaranteed to be stable.

Sourceval merge : 'a t -> 'a t -> compare:('a -> 'a -> int) -> 'a t

Merges two lists: assuming that l1 and l2 are sorted according to the comparison function compare, merge compare l1 l2 will return a sorted list containing all the elements of l1 and l2. If several elements compare equal, the elements of l1 will be before the elements of l2.

Sourceval hd : 'a t -> 'a option
Sourceval tl : 'a t -> 'a t option
Sourceval hd_exn : 'a t -> 'a

Returns the first element of the given list. Raises if the list is empty.

Sourceval tl_exn : 'a t -> 'a t

Returns the given list without its first element. Raises if the list is empty.

Sourceval findi_exn : 'a t -> f:(int -> 'a -> bool) -> int * 'a

Like find_exn, but passes the index as an argument.

Sourceval find_exn : 'a t -> f:('a -> bool) -> 'a

find_exn t ~f returns the first element of t that satisfies f. It raises Stdlib.Not_found or Not_found_s if there is no such element.

Sourceval find_map_exn : 'a t -> f:('a -> 'b option) -> 'b

Returns the first evaluation of f that returns Some. Raises Stdlib.Not_found or Not_found_s if f always returns None.

Sourceval find_mapi_exn : 'a t -> f:(int -> 'a -> 'b option) -> 'b

Like find_map_exn, but passes the index as an argument.

folding_map is a version of map that threads an accumulator through calls to f.

Sourceval folding_map : 'a t -> init:'acc -> f:('acc -> 'a -> 'acc * 'b) -> 'b t
Sourceval folding_mapi : 'a t -> init:'acc -> f:(int -> 'acc -> 'a -> 'acc * 'b) -> 'b t

fold_map is a combination of fold and map that threads an accumulator through calls to f.

Sourceval fold_map : 'a t -> init:'acc -> f:('acc -> 'a -> 'acc * 'b) -> 'acc * 'b t
Sourceval fold_mapi : 'a t -> init:'acc -> f:(int -> 'acc -> 'a -> 'acc * 'b) -> 'acc * 'b t

map2 [a1; ...; an] [b1; ...; bn] ~f is [f a1 b1; ...; f an bn]. The exn version will raise if the two lists have different lengths.

Sourceval map2_exn : 'a t -> 'b t -> f:('a -> 'b -> 'c) -> 'c t
Sourceval map2 : 'a t -> 'b t -> f:('a -> 'b -> 'c) -> 'c t Or_unequal_lengths.t

Analogous to rev_map2.

Sourceval rev_map3_exn : 'a t -> 'b t -> 'c t -> f:('a -> 'b -> 'c -> 'd) -> 'd t
Sourceval rev_map3 : 'a t -> 'b t -> 'c t -> f:('a -> 'b -> 'c -> 'd) -> 'd t Or_unequal_lengths.t

Analogous to map2.

Sourceval map3_exn : 'a t -> 'b t -> 'c t -> f:('a -> 'b -> 'c -> 'd) -> 'd t
Sourceval map3 : 'a t -> 'b t -> 'c t -> f:('a -> 'b -> 'c -> 'd) -> 'd t Or_unequal_lengths.t
Sourceval rev_map_append : 'a t -> 'b t -> f:('a -> 'b) -> 'b t

rev_map_append l1 l2 ~f reverses l1 mapping f over each element, and appends the result to the front of l2.

Sourceval fold_right : 'a t -> f:('a -> 'acc -> 'acc) -> init:'acc -> 'acc

fold_right [a1; ...; an] ~f ~init:b is f a1 (f a2 (... (f an b) ...)).

Sourceval fold_left : 'a t -> init:'acc -> f:('acc -> 'a -> 'acc) -> 'acc

fold_left is the same as Container.S1.fold, and one should always use fold rather than fold_left, except in functors that are parameterized over a more general signature where this equivalence does not hold.

Transform a list of pairs into a pair of lists: unzip [(a1,b1); ...; (an,bn)] is ([a1; ...; an], [b1; ...; bn]).

Sourceval unzip : ('a * 'b) t -> 'a t * 'b t
Sourceval unzip3 : ('a * 'b * 'c) t -> 'a t * 'b t * 'c t

Transform a pair of lists into an (optional) list of pairs: zip [a1; ...; an] [b1; ...; bn] is [(a1,b1); ...; (an,bn)]. Returns Unequal_lengths if the two lists have different lengths.

Sourceval zip : 'a t -> 'b t -> ('a * 'b) t Or_unequal_lengths.t
Sourceval zip_exn : 'a t -> 'b t -> ('a * 'b) t
Sourceval rev_mapi : 'a t -> f:(int -> 'a -> 'b) -> 'b t
Sourceval reduce_exn : 'a t -> f:('a -> 'a -> 'a) -> 'a

reduce_exn [a1; ...; an] ~f is f (... (f (f a1 a2) a3) ...) an. It fails on the empty list. Tail recursive.

Sourceval reduce : 'a t -> f:('a -> 'a -> 'a) -> 'a option
Sourceval reduce_balanced : 'a t -> f:('a -> 'a -> 'a) -> 'a option

reduce_balanced returns the same value as reduce when f is associative, but differs in that the tree of nested applications of f has logarithmic depth.

This is useful when your 'a grows in size as you reduce it and f becomes more expensive with bigger inputs. For example, reduce_balanced ~f:(^) takes n*log(n) time, while reduce ~f:(^) takes quadratic time.

Sourceval reduce_balanced_exn : 'a t -> f:('a -> 'a -> 'a) -> 'a
Sourceval group : 'a t -> break:('a -> 'a -> bool) -> 'a t t

group l ~break returns a list of lists (i.e., groups) whose concatenation is equal to the original list. Each group is broken where break returns true on a pair of successive elements.

Example:

  group ~break:(<>) ['M';'i';'s';'s';'i';'s';'s';'i';'p';'p';'i'] ->

  [['M'];['i'];['s';'s'];['i'];['s';'s'];['i'];['p';'p'];['i']] 
Sourceval groupi : 'a t -> break:(int -> 'a -> 'a -> bool) -> 'a t t

This is just like group, except that you get the index in the original list of the current element along with the two elements.

Example, group the chars of "Mississippi" into triples:

  groupi ~break:(fun i _ _ -> i mod 3 = 0)
    ['M';'i';'s';'s';'i';'s';'s';'i';'p';'p';'i'] ->

  [['M'; 'i'; 's']; ['s'; 'i'; 's']; ['s'; 'i'; 'p']; ['p'; 'i']] 
Sourceval sort_and_group : 'a t -> compare:('a -> 'a -> int) -> 'a t t

Group equal elements into the same buckets. Sorting is stable.

Sourceval chunks_of : 'a t -> length:int -> 'a t t

chunks_of l ~length returns a list of lists whose concatenation is equal to the original list. Every list has length elements, except for possibly the last list, which may have fewer. chunks_of raises if length <= 0.

Sourceval last : 'a t -> 'a option

The final element of a list. The _exn version raises on the empty list.

Sourceval is_prefix : 'a t -> prefix:'a t -> equal:('a -> 'a -> bool) -> bool

is_prefix xs ~prefix returns true if xs starts with prefix.

Sourceval is_suffix : 'a t -> suffix:'a t -> equal:('a -> 'a -> bool) -> bool

is_suffix xs ~suffix returns true if xs ends with suffix.

Sourceval find_consecutive_duplicate : 'a t -> equal:('a -> 'a -> bool) -> ('a * 'a) option

find_consecutive_duplicate t ~equal returns the first pair of consecutive elements (a1, a2) in t such that equal a1 a2. They are returned in the same order as they appear in t. equal need not be an equivalence relation; it is simply used as a predicate on consecutive elements.

Sourceval remove_consecutive_duplicates : ?which_to_keep:[ `First | `Last ] -> 'a t -> equal:('a -> 'a -> bool) -> 'a t

Returns the given list with consecutive duplicates removed. The relative order of the other elements is unaffected. The element kept from a run of duplicates is determined by which_to_keep.

Sourceval dedup_and_sort : 'a t -> compare:('a -> 'a -> int) -> 'a t

Returns the given list with duplicates removed and in sorted order.

Sourceval find_a_dup : 'a t -> compare:('a -> 'a -> int) -> 'a option

find_a_dup returns a duplicate from the list (with no guarantees about which duplicate you get), or None if there are no dups.

Sourceval contains_dup : 'a t -> compare:('a -> 'a -> int) -> bool

Returns true if there are any two elements in the list which are the same. O(n log n) time complexity.

Sourceval find_all_dups : 'a t -> compare:('a -> 'a -> int) -> 'a list

find_all_dups returns a list of all elements that occur more than once, with no guarantees about order. O(n log n) time complexity.

Sourceval all_equal : 'a t -> equal:('a -> 'a -> bool) -> 'a option

all_equal returns a single element of the list that is equal to all other elements, or None if no such element exists.

Sourceval range : ?stride:int -> ?start:[ `inclusive | `exclusive ] -> ?stop:[ `inclusive | `exclusive ] -> int -> int -> int t

range ?stride ?start ?stop start_i stop_i is the list of integers from start_i to stop_i, stepping by stride. If stride < 0 then we need start_i > stop_i for the result to be nonempty (or start_i = stop_i in the case where both bounds are inclusive).

Sourceval range' : compare:('a -> 'a -> int) -> stride:('a -> 'a) -> ?start:[ `inclusive | `exclusive ] -> ?stop:[ `inclusive | `exclusive ] -> 'a -> 'a -> 'a t

range' is analogous to range for general start/stop/stride types. range' raises if stride x returns x or if the direction that stride x moves x changes from one call to the next.

Sourceval rev_filter_map : 'a t -> f:('a -> 'b option) -> 'b t

rev_filter_map l ~f is the reversed sublist of l containing only elements for which f returns Some e.

Sourceval rev_filter_mapi : 'a t -> f:(int -> 'a -> 'b option) -> 'b t

rev_filter_mapi is just like rev_filter_map, but it also passes in the index of each element as the first argument to the mapped function. Tail-recursive.

Sourceval filter_opt : 'a option t -> 'a t

filter_opt l is the sublist of l containing only elements which are Some e. In other words, filter_opt l = filter_map ~f:Fn.id l.

Sourcemodule Assoc = Base.List.Assoc

Interpret a list of (key, value) pairs as a map in which only the first occurrence of a key affects the semantics, i.e.:

Sourceval sub : 'a t -> pos:int -> len:int -> 'a t

sub pos len l is the len-element sublist of l, starting at pos.

Sourceval take : 'a t -> int -> 'a t

take l n returns the first n elements of l, or all of l if n > length l. take l n = fst (split_n l n).

Sourceval drop : 'a t -> int -> 'a t

drop l n returns l without the first n elements, or the empty list if n > length l. drop l n is equivalent to snd (split_n l n).

Sourceval take_while : 'a t -> f:('a -> bool) -> 'a t

take_while l ~f returns the longest prefix of l for which f is true.

Sourceval drop_while : 'a t -> f:('a -> bool) -> 'a t

drop_while l ~f drops the longest prefix of l for which f is true.

Sourceval split_while : 'a t -> f:('a -> bool) -> 'a t * 'a t

split_while xs ~f = (take_while xs ~f, drop_while xs ~f).

Sourceval drop_last : 'a t -> 'a t option

drop_last l drops the last element of l, returning None if l is empty.

Sourceval drop_last_exn : 'a t -> 'a t
Sourceval concat_no_order : 'a t t -> 'a t

Like concat, but faster and without preserving any ordering (i.e., for lists that are essentially viewed as multi-sets).

Sourceval cons : 'a -> 'a t -> 'a t
Sourceval cartesian_product : 'a t -> 'b t -> ('a * 'b) t

Returns a list with all possible pairs -- if the input lists have length len1 and len2, the resulting list will have length len1 * len2.

Sourceval permute : ?random_state:Base.Random.State.t -> 'a t -> 'a t

permute ?random_state t returns a permutation of t.

permute side-effects random_state by repeated calls to Random.State.int. If random_state is not supplied, permute uses Random.State.default.

Sourceval random_element : ?random_state:Base.Random.State.t -> 'a t -> 'a option

random_element ?random_state t is None if t is empty, else it is Some x for some x chosen uniformly at random from t.

random_element side-effects random_state by calling Random.State.int. If random_state is not supplied, random_element uses Random.State.default.

Sourceval random_element_exn : ?random_state:Base.Random.State.t -> 'a t -> 'a
Sourceval is_sorted : 'a t -> compare:('a -> 'a -> int) -> bool

is_sorted t ~compare returns true iff for all adjacent a1; a2 in t, compare a1 a2 <= 0.

is_sorted_strictly is similar, except it uses < instead of <=.

Sourceval is_sorted_strictly : 'a t -> compare:('a -> 'a -> int) -> bool
Sourceval equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool
Sourcemodule Infix = Base.List.Infix
Sourceval transpose : 'a t t -> 'a t t option

transpose m transposes the rows and columns of the matrix m, considered as either a row of column lists or (dually) a column of row lists.

Example:

transpose [[1;2;3];[4;5;6]] = [[1;4];[2;5];[3;6]]

On non-empty rectangular matrices, transpose is an involution (i.e., transpose (transpose m) = m). Transpose returns None when called on lists of lists with non-uniform lengths.

Sourceval transpose_exn : 'a t t -> 'a t t

transpose_exn transposes the rows and columns of its argument, throwing an exception if the list is not rectangular.

Sourceval intersperse : 'a t -> sep:'a -> 'a t

intersperse xs ~sep places sep between adjacent elements of xs. For example, intersperse [1;2;3] ~sep:0 = [1;0;2;0;3].

Sourceval split3 : ('a * 'b * 'c) list -> 'a list * 'b list * 'c list
Sourceval filter_map : f:('a -> 'b option) -> 'a list -> 'b list
Sourceval last_exn : 'a list -> 'a
Sourceval pp : f:('a -> string) -> 'a list -> string
Sourceval fold_left0 : ('a -> 'a -> 'a) -> 'a list -> 'a
Sourceval concat_map : f:('a -> 'b list) -> 'a list -> 'b list
Sourceval empty : 'a list -> bool
OCaml

Innovation. Community. Security.