keen/col/util
SourceThis is a standard module
and does not need to be explicitly imported.
buffer-like[col, elem] spec (col, elem) array-likefor-loop[out-col, out-elem, in-col, in-elem] out-col(a in-col, f out-elem mut(in-elem)) (out-col, out-elem) list-new, (in-col, in-elem) some, in-col sizeCalls
f for each element in the input collection and returns an output collection of the results of f.reduce[col, elem] elem option(a col, f elem mut((elem, elem))) (col, elem) someReturns an empty option if
a is empty.filter[out-col, elem, in-col] out-col(a in-col, f bool mut(elem)) (out-col, elem) list-new, in-col size, (in-col, elem) someCalls
f for each element in the input collection, and returns an output collection of the elements for which f returned true.omit[out-col, elem, in-col] out-col(a in-col, f bool mut(elem)) (out-col, elem) list-new, in-col size, (in-col, elem) someOpposite of
filterpartition[out-col-false, out-col-true, elem, in-col] (out-col-false, out-col-true)(a in-col, f bool mut(elem)) (out-col-false, elem) list-new, (out-col-true, elem) list-new, in-col size, (in-col, elem) someReturns a collection of all elements for which
f returned false, and another collection for which f returned true.each[col, elem] void(a col, f void mut(elem)) (col, elem) someSame as
for-loop. For good style, use this only with an it lambda. each xs, it.log is OK, but instead of each xs, of x ..., prefer for x in xs ...map[out-col, out-elem, in-col, in-elem] out-col(a in-col, f out-elem mut(in-elem)) (out-col, out-elem) list-new, (in-col, in-elem) some, in-col sizeSame as
for-loop. For good style, use this only with an it lambda. map xs, it.abs is OK, but instead of map xs, of x ..., prefer for x in xs ...map-optionally[out-col, out-elem, in-col, in-elem] out-col(a in-col, f out-elem option mut(in-elem)) (out-col, out-elem) list-new, (in-col, in-elem) someSame as
for-option. For good style, use this only with an it lambda.map-every[out-col, out-elem, in-col, in-elem] out-col option(a in-col, f out-elem option mut(in-elem)) (out-col, out-elem) list-new, in-col size, (in-col, in-elem) someOnly returns a result if
f returned a non-empty option every time.map-values[out-col, out-value, in-col, in-value, key] out-col(col in-col, f out-value mut(in-value)) (out-col, (key, out-value)) list-new, (in-col, (key, in-value)) some, in-col sizeconcatenate[col] spec~~ col(a col, b col)for-option[out-col, out-elem, in-col, in-elem] out-col(a in-col, f out-elem option mut(in-elem)) (out-col, out-elem) list-new, (in-col, in-elem) someLike
for-loop, but f returns an option and empty options are not output.for-star[out-col, out-elem, in-col, in-elem] out-col(a in-col, f out-elem[] mut(in-elem)) (out-col, out-elem) list-new, (in-col, in-elem) someLike
for-loop, but f must return an array of outputs which are all added to the result.flat-map[out-col, out-elem, in-col, in-elem] out-col(a in-col, f out-elem[] mut(in-elem)) (out-col, out-elem) list-new, (in-col, in-elem) someSame as
for-star. For good style, use this only with an it lambda.with-index[col] recordinner colwith-is-first[col] recordinner colwith-is-last[col] recordinner colsplit[out-col, in-col, in-iter, elem] out-col[](a in-col, split-by in-col) (in-col, in-iter, elem) basic-iter, in-iter skip-next-n, (out-col, in-iter) slice, elem equalcount[col, elem] nat32(a col, f bool mut(elem)) (col, elem) someCalls
f on every element and returns the number of times f returned true.count-while[col, elem] nat32(a col, f bool mut(elem)) (col, elem) someLike
count but stops the first time f returns false.summable[t] spec t new+ t(a t, b t)infinite[t] recordvalue tCollection that iterates and returns 'value' forever
reverse[col] recordinner colto[out-col, in-col, elem] out-col(a in-col reverse) (out-col, elem) list-new, in-col size, (in-col, elem) some-reverseindex-of-sequence[col, iter, elem] nat32 option(a col, seq col) (col, iter, elem) basic-iter, iter skip-next-n, elem equalswap-at[col, elem] void(a col, i index-relative-to-end, j index-relative-to-end) (col, elem) buffer-liketake-while[out, col, iter, elem] out(a col, f bool mut(elem)) (iter, col) begin, (elem, iter) take-next, iter copy, (out, iter) slicetake-right-while[out, col, iter, elem] out(a col, f bool mut(elem)) (iter, col) end, (elem, iter) take-prev, iter copy, (out, iter) slicedrop-while[out, col, iter, elem] out(a col, f bool mut(elem)) (iter, col) begin, (iter, col) end, (elem, iter) take-next, iter copy, (out, iter) slicedrop-right-while[out, col, iter, elem] out(a col, f bool mut(elem)) (iter, col) begin, (iter, col) end, (elem, iter) take-prev, iter copy, (out, iter) slicestarts-with[col, iter, elem] bool(a col, b col) (col, iter, elem) basic-iter, iter skip-next-n, elem equalends-with[col, iter, elem] bool(a col, b col) (col, iter, elem) basic-reverse-iter, iter skip-prev-n, elem equaltry-remove-start[out, col, iter, elem] out option(a col, start col) (col, iter, elem) basic-iter, (iter, col) end, iter skip-next-n, (out, iter) slice, elem equaltry-remove-end[out, col, iter, elem] out option(a col, end col) (col, iter, elem) basic-reverse-iter, (iter, col) begin, iter skip-prev-n, (out, iter) slice, elem equalstrip-left[col, iter, elem] col(a col, b col) (col, iter, elem) basic-iter, (iter, col) end, iter skip-next-n, (col, iter) slice, elem equalRemoves all occurrences of
b from the front of a.strip-right[col, iter, elem] col(a col, b col) (col, iter, elem) basic-reverse-iter, (iter, col) begin, iter skip-prev-n, (col, iter) slice, elem equalRemoves all occurrences of
b from the end of a.contains-seq[col, iter, elem] bool(a col, b col) (col, iter, elem) basic-iter, iter skip-next-n, elem equaltrue if b is contained in a.
That means: The elements in b appear in a, in order, without interruptions.
try-split-once[out, col, iter, elem] (out, out) option(a col, b col) (iter, col) end, (col, iter, elem) basic-iter, iter skip-next-n, (out, iter) slice, elem equalFinds the first appearance of b in a, and returns slices of a to the left and right of that.
Returns an empty option if b is not a subsequence of a.
try-split-once-right[out, col, iter, elem] (out, out) option(a col, b col) (iter, col) begin, (col, iter, elem) basic-reverse-iter, iter skip-prev-n, (out, iter) slice, elem equalbuilder[t] record mut (has private fields)build-options recordwith-block[col0, elem0, col1, elem1] (col0, col1)(a build2, f void mut((elem0 builder, elem1 builder))) (col0, elem0) list-new, (col1, elem1) list-newonly[col, elem] elem option(a col) col size, (col, elem) someIf the collection has a single element, this is it. Otherwise this is an empty option.
only2[col, elem] (elem, elem) option(a col) col size, (col, elem) someIf the collection has exactly 2 elements, returns them as a tuple. Otherwise this is an empty option.
only3[col, elem] (elem, elem, elem) tuple3 option(a col) col size, (col, elem) someIf the collection has exactly 3 elements, returns them as a tuple. Otherwise this is an empty option.
only4[col, elem] (elem, elem, elem, elem) tuple4 option(a col) col size, (col, elem) someIf the collection has exactly 4 elements, returns them as a tuple.
only5[col, elem] (elem, elem, elem, elem, elem) tuple5 option(a col) col size, (col, elem) someIf the collection has exactly 5 elements, returns them as a tuple.
only6[col, elem] (elem, elem, elem, elem, elem, elem) tuple6 option(a col) col size, (col, elem) someIf the collection has exactly 6 elements, returns them as a tuple.
only7[col, elem] (elem, elem, elem, elem, elem, elem, elem) tuple7 option(a col) col size, (col, elem) someIf the collection has exactly 7 elements, returns them as a tuple.
only8[col, elem] (elem, elem, elem, elem, elem, elem, elem, elem) tuple8 option(a col) col size, (col, elem) someIf the collection has exactly 8 elements, returns them as a tuple.
zip[col0, col1] recorda col0b col1some[col0, elem0, col1, elem1] bool(a (col0, col1) zip, f bool mut((elem0, elem1))) (col0, elem0) array-like, (col1, elem1) array-likesome-reverse[col0, elem0, col1, elem1] bool(a (col0, col1) zip, f bool mut((elem0, elem1))) (col0, elem0) array-like, (col1, elem1) array-likezip-smaller[col0, col1] recorda col0b col1Like
zip but allows the collections to be different sizes, discarding extra elements.some[col0, elem0, col1, elem1] bool(a (col0, col1) zip-smaller, f bool mut((elem0, elem1))) (col0, elem0) array-like, (col1, elem1) array-likesome-reverse[col0, elem0, col1, elem1] bool(a (col0, col1) zip-smaller, f bool mut((elem0, elem1))) (col0, elem0) array-like, (col1, elem1) array-likeall-pairs[t] recordinner t[]All pairs of different two elements of the array. The element with the lower index always comes first.
adjacent-pairs[t] recordinner t[](a[0], a[1]), (a[1], a[2]), etc.all-combinations[col0, col1] recordcol0 col0col1 col1some[col0, elem0, col1, elem1] bool(a (col0, col1) all-combinations, f bool mut((elem0, elem1))) (col0, elem0) some, (col1, elem1) some
ffor each element in the collection and returns nothing.