diff --git a/doc/index.html b/doc/index.html index 61e6bf0..3dc79b0 100644 --- a/doc/index.html +++ b/doc/index.html @@ -2,7 +2,7 @@
Iter.IOBasic IO
Very basic interface to manipulate files as iterator of chunks/lines. The iterators take care of opening and closing files properly; every time one iterates over an iterator, the file is opened/closed again.
Example: copy a file "a" into file "b", removing blank lines:
Iterator.(IO.lines_of "a" |> filter (fun l-> l<> "") |> IO.write_lines "b");;By chunks of 4096 bytes:
Iterator.IO.(chunks_of ~size:4096 "a" |> write_to "b");;Read the lines of a file into a list:
Iterator.IO.lines "a" |> Iterator.to_listval lines_of : ?mode:int -> ?flags:Stdlib.open_flag list -> string -> string tlines_of filename reads all lines of the given file. It raises the same exception as would opening the file and read from it, except from End_of_file (which is caught). The file is always properly closed. Every time the iterator is iterated on, the file is opened again, so different iterations might return different results
val chunks_of :
+IO (iter.Iter.IO) Module Iter.IO
Basic IO
Very basic interface to manipulate files as iterator of chunks/lines. The iterators take care of opening and closing files properly; every time one iterates over an iterator, the file is opened/closed again.
Example: copy a file "a" into file "b", removing blank lines:
Iterator.(IO.lines_of "a" |> filter (fun l-> l<> "") |> IO.write_lines "b");;
By chunks of 4096 bytes:
Iterator.IO.(chunks_of ~size:4096 "a" |> write_to "b");;
Read the lines of a file into a list:
Iterator.IO.lines "a" |> Iterator.to_list
val lines_of : ?mode:int -> ?flags:Stdlib.open_flag list -> string -> string tlines_of filename reads all lines of the given file. It raises the same exception as would opening the file and read from it, except from End_of_file (which is caught). The file is always properly closed. Every time the iterator is iterated on, the file is opened again, so different iterations might return different results
val chunks_of :
?mode:int ->
?flags:Stdlib.open_flag list ->
?size:int ->
diff --git a/doc/iter/Iter/Infix/index.html b/doc/iter/Iter/Infix/index.html
index 27e638b..2da4663 100644
--- a/doc/iter/Iter/Infix/index.html
+++ b/doc/iter/Iter/Infix/index.html
@@ -1,2 +1,2 @@
-Infix (iter.Iter.Infix) Module Iter.Infix
val (--) : int -> int -> int ta -- b is the range of integers from a to b, both included, in increasing order. It will therefore be empty if a > b.
val (--^) : int -> int -> int ta --^ b is the range of integers from b to a, both included, in decreasing order (starts from a). It will therefore be empty if a < b.
\ No newline at end of file
+Infix (iter.Iter.Infix) Module Iter.Infix
val (--) : int -> int -> int ta -- b is the range of integers from a to b, both included, in increasing order. It will therefore be empty if a > b.
val (--^) : int -> int -> int ta --^ b is the range of integers from b to a, both included, in decreasing order (starts from a). It will therefore be empty if a < b.
\ No newline at end of file
diff --git a/doc/iter/Iter/Map/Adapt/index.html b/doc/iter/Iter/Map/Adapt/index.html
index c7fcea8..dfc011d 100644
--- a/doc/iter/Iter/Map/Adapt/index.html
+++ b/doc/iter/Iter/Map/Adapt/index.html
@@ -1,6 +1,6 @@
-Adapt (iter.Iter.Map.Adapt) Module Map.Adapt
Adapt a pre-existing Map module to make it iterator-aware
Parameters
Signature
include Stdlib.Map.S with type key = M.key with type 'a t = 'a M.t
val empty : 'a tval is_empty : 'a t -> boolval cardinal : 'a t -> intval is_empty : 'a t -> bool
\ No newline at end of file
diff --git a/doc/iter/Iter/Map/Make/index.html b/doc/iter/Iter/Map/Make/index.html
index d2f8b2e..21237ed 100644
--- a/doc/iter/Iter/Map/Make/index.html
+++ b/doc/iter/Iter/Map/Make/index.html
@@ -1,6 +1,6 @@
-Make (iter.Iter.Map.Make) Module Map.Make
Create an enriched Map module, with iterator-aware functions
Parameters
Signature
include Stdlib.Map.S with type key = V.t
val empty : 'a tval is_empty : 'a t -> boolval cardinal : 'a t -> intval is_empty : 'a t -> bool
\ No newline at end of file
diff --git a/doc/iter/Iter/Map/index.html b/doc/iter/Iter/Map/index.html
index 5d8efcc..16991f6 100644
--- a/doc/iter/Iter/Map/index.html
+++ b/doc/iter/Iter/Map/index.html
@@ -1,4 +1,4 @@
-Map (iter.Iter.Map) Module Iter.Map
module type S = sig ... endmodule Adapt
+Map (iter.Iter.Map) Module Iter.Map
module type S = sig ... endAdapt a pre-existing Map module to make it iterator-aware
\ No newline at end of file
diff --git a/doc/iter/Iter/Map/module-type-S/index.html b/doc/iter/Iter/Map/module-type-S/index.html
index 64f85f9..fab9611 100644
--- a/doc/iter/Iter/Map/module-type-S/index.html
+++ b/doc/iter/Iter/Map/module-type-S/index.html
@@ -1,6 +1,6 @@
-S (iter.Iter.Map.S) Module type Map.S
\ No newline at end of file
diff --git a/doc/iter/Iter/Set/Adapt/index.html b/doc/iter/Iter/Set/Adapt/index.html
index d65ae1e..dbfb56f 100644
--- a/doc/iter/Iter/Set/Adapt/index.html
+++ b/doc/iter/Iter/Set/Adapt/index.html
@@ -1,2 +1,2 @@
-Adapt (iter.Iter.Set.Adapt) Module Set.Adapt
Create an enriched Set module from the given one
Parameters
Signature
\ No newline at end of file
+Adapt (iter.Iter.Set.Adapt) Module Set.Adapt
Create an enriched Set module from the given one
Parameters
Signature
\ No newline at end of file
diff --git a/doc/iter/Iter/Set/Make/index.html b/doc/iter/Iter/Set/Make/index.html
index 43f0640..3a7c44a 100644
--- a/doc/iter/Iter/Set/Make/index.html
+++ b/doc/iter/Iter/Set/Make/index.html
@@ -1,2 +1,2 @@
-Make (iter.Iter.Set.Make) Module Set.Make
Functor to build an extended Set module from an ordered type
Parameters
Signature
\ No newline at end of file
+Make (iter.Iter.Set.Make) Module Set.Make
Functor to build an extended Set module from an ordered type
Parameters
Signature
\ No newline at end of file
diff --git a/doc/iter/Iter/Set/index.html b/doc/iter/Iter/Set/index.html
index 83c3748..5e6b5ce 100644
--- a/doc/iter/Iter/Set/index.html
+++ b/doc/iter/Iter/Set/index.html
@@ -1,2 +1,2 @@
-Set (iter.Iter.Set) Module Iter.Set
module type S = sig ... endCreate an enriched Set module from the given one
\ No newline at end of file
+Set (iter.Iter.Set) Module Iter.Set
module type S = sig ... endCreate an enriched Set module from the given one
\ No newline at end of file
diff --git a/doc/iter/Iter/Set/module-type-S/index.html b/doc/iter/Iter/Set/module-type-S/index.html
index c349b27..8f0d151 100644
--- a/doc/iter/Iter/Set/module-type-S/index.html
+++ b/doc/iter/Iter/Set/module-type-S/index.html
@@ -1,2 +1,2 @@
-S (iter.Iter.Set.S) Module type Set.S
\ No newline at end of file
+S (iter.Iter.Set.S) Module type Set.S
\ No newline at end of file
diff --git a/doc/iter/Iter/index.html b/doc/iter/Iter/index.html
index 6424890..8ec4a42 100644
--- a/doc/iter/Iter/index.html
+++ b/doc/iter/Iter/index.html
@@ -1,5 +1,5 @@
-Iter (iter.Iter) Module Iter
Simple and Efficient Iterators.
The iterators are designed to allow easy transfer (mappings) between data structures, without defining n^2 conversions between the n types. The implementation relies on the assumption that an iterator can be iterated on as many times as needed; this choice allows for high performance of many combinators. However, for transient iterators, the persistent function is provided, storing elements of a transient iterator in memory; the iterator can then be used several times (See further).
Note that some combinators also return iterators (e.g. group). The transformation is computed on the fly every time one iterates over the resulting iterator. If a transformation performs heavy computation, persistent can also be used as intermediate storage.
Most functions are lazy, i.e. they do not actually use their arguments until their result is iterated on. For instance, if one calls map on an iterator, one gets a new iterator, but nothing else happens until this new iterator is used (by folding or iterating on it).
If an iterator is built from an iteration function that is repeatable (i.e. calling it several times always iterates on the same set of elements, for instance List.iter or Map.iter), then the resulting t object is also repeatable. For one-time iter functions such as iteration on a file descriptor or a Seq, the persistent function can be used to iterate and store elements in a memory structure; the result is an iterator that iterates on the elements of this memory structure, cheaply and repeatably.
An iterator of values of type 'a. If you give it a function 'a -> unit it will be applied to every element of the iterator successively.
type +'a iter = 'a tCreation
val from_iter : (('a -> unit) -> unit) -> 'a tBuild an iterator from a iter function
val from_labelled_iter : (f:('a -> unit) -> unit) -> 'a tBuild an iterator from a labelled iter function
val from_fun : (unit -> 'a option) -> 'a tCall the function repeatedly until it returns None. This iterator is transient, use persistent if needed!
val empty : 'a tEmpty iterator. It contains no element.
val singleton : 'a -> 'a tSingleton iterator, with exactly one element.
val doubleton : 'a -> 'a -> 'a tIterator with exactly two elements
val init : (int -> 'a) -> 'a tinit f is the infinite iterator f 0; f 1; f 2; ….
cons x l yields x, then yields from l. Same as append (singleton x) l.
Caution: it is advised not to build long iterators out of cons, because it's inefficient. Each additional cons x i adds one layer of function call per item traversed in i.
val repeat : 'a -> 'a tInfinite iterator of the same element. You may want to look at take and the likes if you iterate on it.
val iterate : ('a -> 'a) -> 'a -> 'a titerate f x is the infinite iterator x, f(x), f(f(x)), ...
val forever : (unit -> 'b) -> 'b tIterator that calls the given function to produce elements. The iterator may be transient (depending on the function), and definitely is infinite. You may want to use take and persistent.
Cycle forever through the given iterator. Assume the given iterator can be traversed any amount of times (not transient). This yields an infinite iterator, you should use something like take not to loop forever.
val unfoldr : ('b -> ('a * 'b) option) -> 'b -> 'a tunfoldr f b will apply f to b. If it yields Some (x,b') then x is returned and unfoldr recurses with b'.
Consumption
val iter : ('a -> unit) -> 'a t -> unitConsume the iterator, passing all its arguments to the function. Basically iter f seq is just seq f.
val iteri : (int -> 'a -> unit) -> 'a t -> unitIterate on elements and their index in the iterator
val for_each : 'a t -> ('a -> unit) -> unitConsume the iterator, passing all its arguments to the function. for_each seq f is the same as iter f seq, i.e., iter with arguments reversed.
val for_eachi : 'a t -> (int -> 'a -> unit) -> unitIterate on elements and their index in the iterator. for_eachi seq f is the same as iteri f seq, i.e., iteri with arguments reversed.
val fold : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'aFold over elements of the iterator, consuming it
val foldi : ('a -> int -> 'b -> 'a) -> 'a -> 'b t -> 'aFold over elements of the iterator and their index, consuming it
fold_filter_map f acc l is a fold_map-like function, but the function can choose to skip an element by retuning None.
Map objects two by two. lazily. The last element is kept in the iterator if the count is odd.
val for_all : ('a -> bool) -> 'a t -> boolDo all elements satisfy the predicate?
val exists : ('a -> bool) -> 'a t -> boolExists there some element satisfying the predicate?
val mem : ?eq:('a -> 'a -> bool) -> 'a -> 'a t -> boolIs the value a member of the iterator?
val find : ('a -> 'b option) -> 'a t -> 'b optionFind the first element on which the function doesn't return None
val find_pred : ('a -> bool) -> 'a t -> 'a optionfind_pred p l finds the first element of l that satisfies p, or returns None if no element satisfies p
val length : 'a t -> intHow long is the iterator? Forces the iterator.
val is_empty : 'a t -> boolIs the iterator empty? Forces the iterator.
Transformation
Append two iterators. Iterating on the result is like iterating on the first, then on the second.
Append iterators. Iterating on the result is like iterating on the each iterator of the list in order.
Monadic bind. Intuitively, it applies the function to every element of the initial iterator, and calls concat. Formerly flatMap
seq_list l returns all the ways to pick one element in each sub-iterator in l. Assumes the sub-iterators can be iterated on several times.
seq_list_map f l maps f over every element of l, then calls seq_list
Map with indices, and only keep non-None elements
val filter_count : ('a -> bool) -> 'a t -> intCount how many elements satisfy the given predicate
filter_some l retains only elements of the form Some x. Same as filter_map (fun x->x)
keep_error l retains only elements of the form Error x.
Caching
Iterate on the iterator, storing elements in an efficient internal structure.. The resulting iterator can be iterated on as many times as needed. Note: calling persistent on an already persistent iterator will still make a new copy of the iterator!
Lazy version of persistent. When calling persistent_lazy s, a new iterator s' is immediately returned (without actually consuming s) in constant time; the first time s' is iterated on, it also consumes s and caches its content into a inner data structure that will back s' for future iterations.
warning: on the first traversal of s', if the traversal is interrupted prematurely (take, etc.) then s' will not be memorized, and the next call to s' will traverse s again.
Misc
Sort the iterator. Eager, O(n) ram and O(n ln(n)) time. It iterates on elements of the argument iterator immediately, before it sorts them.
Sort the iterator and remove duplicates. Eager, same as sort
val sorted : ?cmp:('a -> 'a -> int) -> 'a t -> boolChecks whether the iterator is sorted. Eager, same as sort.
Group equal consecutive elements. Linear time. Formerly synonym to group. note: Order of items in each list is unspecified.
Group equal elements, disregarding their order of appearance. precondition: for any x and y, if eq x y then hash x=hash y must hold. note: Order of items in each list is unspecified.
Map each distinct element to its number of occurrences in the whole seq. Similar to group_by seq |> map (fun l->List.hd l, List.length l) precondition: for any x and y, if eq x y then hash x=hash y must hold.
Remove consecutive duplicate elements. Basically this is like fun seq -> map List.hd (group seq).
Cartesian product of iterators. When calling product a b, the caller MUST ensure that b can be traversed as many times as required (several times), possibly by calling persistent on it beforehand.
val diagonal_l : 'a list -> ('a * 'a) tAll pairs of distinct positions of the list. diagonal l will return the iterator of all List.nth i l, List.nth j l if i < j.
All pairs of distinct positions of the iterator. Iterates only once on the iterator, which must be finite.
join ~join_row a b combines every element of a with every element of b using join_row. If join_row returns None, then the two elements do not combine. Assume that b allows for multiple iterations.
val join_by :
+Iter (iter.Iter) Module Iter
Simple and Efficient Iterators.
The iterators are designed to allow easy transfer (mappings) between data structures, without defining n^2 conversions between the n types. The implementation relies on the assumption that an iterator can be iterated on as many times as needed; this choice allows for high performance of many combinators. However, for transient iterators, the persistent function is provided, storing elements of a transient iterator in memory; the iterator can then be used several times (See further).
Note that some combinators also return iterators (e.g. group). The transformation is computed on the fly every time one iterates over the resulting iterator. If a transformation performs heavy computation, persistent can also be used as intermediate storage.
Most functions are lazy, i.e. they do not actually use their arguments until their result is iterated on. For instance, if one calls map on an iterator, one gets a new iterator, but nothing else happens until this new iterator is used (by folding or iterating on it).
If an iterator is built from an iteration function that is repeatable (i.e. calling it several times always iterates on the same set of elements, for instance List.iter or Map.iter), then the resulting t object is also repeatable. For one-time iter functions such as iteration on a file descriptor or a Seq, the persistent function can be used to iterate and store elements in a memory structure; the result is an iterator that iterates on the elements of this memory structure, cheaply and repeatably.
An iterator of values of type 'a. If you give it a function 'a -> unit it will be applied to every element of the iterator successively.
type +'a iter = 'a tCreation
val from_iter : (('a -> unit) -> unit) -> 'a tBuild an iterator from a iter function
val from_labelled_iter : (f:('a -> unit) -> unit) -> 'a tBuild an iterator from a labelled iter function
val from_fun : (unit -> 'a option) -> 'a tCall the function repeatedly until it returns None. This iterator is transient, use persistent if needed!
val empty : 'a tEmpty iterator. It contains no element.
val singleton : 'a -> 'a tSingleton iterator, with exactly one element.
val doubleton : 'a -> 'a -> 'a tIterator with exactly two elements
val init : (int -> 'a) -> 'a tinit f is the infinite iterator f 0; f 1; f 2; ….
cons x l yields x, then yields from l. Same as append (singleton x) l.
Caution: it is advised not to build long iterators out of cons, because it's inefficient. Each additional cons x i adds one layer of function call per item traversed in i.
val repeat : 'a -> 'a tInfinite iterator of the same element. You may want to look at take and the likes if you iterate on it.
val iterate : ('a -> 'a) -> 'a -> 'a titerate f x is the infinite iterator x, f(x), f(f(x)), ...
val forever : (unit -> 'b) -> 'b tIterator that calls the given function to produce elements. The iterator may be transient (depending on the function), and definitely is infinite. You may want to use take and persistent.
Cycle forever through the given iterator. Assume the given iterator can be traversed any amount of times (not transient). This yields an infinite iterator, you should use something like take not to loop forever.
val unfoldr : ('b -> ('a * 'b) option) -> 'b -> 'a tunfoldr f b will apply f to b. If it yields Some (x,b') then x is returned and unfoldr recurses with b'.
Consumption
val iter : ('a -> unit) -> 'a t -> unitConsume the iterator, passing all its arguments to the function. Basically iter f seq is just seq f.
val iteri : (int -> 'a -> unit) -> 'a t -> unitIterate on elements and their index in the iterator
val for_each : 'a t -> ('a -> unit) -> unitConsume the iterator, passing all its arguments to the function. for_each seq f is the same as iter f seq, i.e., iter with arguments reversed.
val for_eachi : 'a t -> (int -> 'a -> unit) -> unitIterate on elements and their index in the iterator. for_eachi seq f is the same as iteri f seq, i.e., iteri with arguments reversed.
val fold : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'aFold over elements of the iterator, consuming it
val foldi : ('a -> int -> 'b -> 'a) -> 'a -> 'b t -> 'aFold over elements of the iterator and their index, consuming it
fold_filter_map f acc l is a fold_map-like function, but the function can choose to skip an element by retuning None.
Map objects two by two. lazily. The last element is kept in the iterator if the count is odd.
val for_all : ('a -> bool) -> 'a t -> boolDo all elements satisfy the predicate?
val exists : ('a -> bool) -> 'a t -> boolExists there some element satisfying the predicate?
val mem : ?eq:('a -> 'a -> bool) -> 'a -> 'a t -> boolIs the value a member of the iterator?
val find : ('a -> 'b option) -> 'a t -> 'b optionFind the first element on which the function doesn't return None
val find_pred : ('a -> bool) -> 'a t -> 'a optionfind_pred p l finds the first element of l that satisfies p, or returns None if no element satisfies p
val length : 'a t -> intHow long is the iterator? Forces the iterator.
val is_empty : 'a t -> boolIs the iterator empty? Forces the iterator.
Transformation
Append two iterators. Iterating on the result is like iterating on the first, then on the second.
Append iterators. Iterating on the result is like iterating on the each iterator of the list in order.
Monadic bind. Intuitively, it applies the function to every element of the initial iterator, and calls concat. Formerly flatMap
seq_list l returns all the ways to pick one element in each sub-iterator in l. Assumes the sub-iterators can be iterated on several times.
seq_list_map f l maps f over every element of l, then calls seq_list
Map with indices, and only keep non-None elements
val filter_count : ('a -> bool) -> 'a t -> intCount how many elements satisfy the given predicate
filter_some l retains only elements of the form Some x. Same as filter_map (fun x->x)
keep_error l retains only elements of the form Error x.
Caching
Iterate on the iterator, storing elements in an efficient internal structure.. The resulting iterator can be iterated on as many times as needed. Note: calling persistent on an already persistent iterator will still make a new copy of the iterator!
Lazy version of persistent. When calling persistent_lazy s, a new iterator s' is immediately returned (without actually consuming s) in constant time; the first time s' is iterated on, it also consumes s and caches its content into a inner data structure that will back s' for future iterations.
warning: on the first traversal of s', if the traversal is interrupted prematurely (take, etc.) then s' will not be memorized, and the next call to s' will traverse s again.
Misc
Sort the iterator. Eager, O(n) ram and O(n ln(n)) time. It iterates on elements of the argument iterator immediately, before it sorts them.
Sort the iterator and remove duplicates. Eager, same as sort
val sorted : ?cmp:('a -> 'a -> int) -> 'a t -> boolChecks whether the iterator is sorted. Eager, same as sort.
Group equal consecutive elements. Linear time. Formerly synonym to group. note: Order of items in each list is unspecified.
Group equal elements, disregarding their order of appearance. precondition: for any x and y, if eq x y then hash x=hash y must hold. note: Order of items in each list is unspecified.
Map each distinct element to its number of occurrences in the whole seq. Similar to group_by seq |> map (fun l->List.hd l, List.length l) precondition: for any x and y, if eq x y then hash x=hash y must hold.
Remove consecutive duplicate elements. Basically this is like fun seq -> map List.hd (group seq).
Cartesian product of iterators. When calling product a b, the caller MUST ensure that b can be traversed as many times as required (several times), possibly by calling persistent on it beforehand.
val diagonal_l : 'a list -> ('a * 'a) tAll pairs of distinct positions of the list. diagonal l will return the iterator of all List.nth i l, List.nth j l if i < j.
All pairs of distinct positions of the iterator. Iterates only once on the iterator, which must be finite.
join ~join_row a b combines every element of a with every element of b using join_row. If join_row returns None, then the two elements do not combine. Assume that b allows for multiple iterations.
val join_by :
?eq:'key equal ->
?hash:'key hash ->
('a -> 'key) ->
@@ -21,7 +21,10 @@
('b -> 'a) ->
'a t ->
'b t ->
- ('a * 'b list) tgroup_join_by key2 associates to every element x of the first iterator, all the elements y of the second iterator such that eq x (key y). Elements of the first iterators without corresponding values in the second one are mapped to [] precondition: for any x and y, if eq x y then hash x=hash y must hold.
Set-like
Intersection of two collections. Each element will occur at most once in the result. Eager. precondition: for any x and y, if eq x y then hash x=hash y must hold.
Union of two collections. Each element will occur at most once in the result. Eager. precondition: for any x and y, if eq x y then hash x=hash y must hold.
subset a b returns true if all elements of a belong to b. Eager. precondition: for any x and y, if eq x y then hash x=hash y must hold.
Arithmetic
val max : ?lt:('a -> 'a -> bool) -> 'a t -> 'a optionMax element of the iterator, using the given comparison function.
val min : ?lt:('a -> 'a -> bool) -> 'a t -> 'a optionMin element of the iterator, using the given comparison function. see max for more details.
val sum : int t -> intSum of elements
val sumf : float t -> floatSum of elements, using Kahan summation
List-like
val head : 'a t -> 'a optionFirst element, if any, otherwise None
val head_exn : 'a t -> 'aFirst element, if any, fails
Take at most n elements from the iterator. Works on infinite iterators.
Take elements while they satisfy the predicate, then stops iterating. Will work on an infinite iterator s if the predicate is false for at least one element of s.
val fold_while : ('a -> 'b -> 'a * [ `Stop | `Continue ]) -> 'a -> 'b t -> 'aFolds over elements of the iterator, stopping early if the accumulator returns ('a, `Stop)
Reverse the iterator. O(n) memory and time, needs the iterator to be finite. The result is persistent and does not depend on the input being repeatable.
Pair iterators
val fold2 : ('c -> 'a -> 'b -> 'c) -> 'c -> ('a * 'b) t -> 'cval iter2 : ('a -> 'b -> unit) -> ('a * 'b) t -> unitmap2_2 f g seq2 maps each x, y of seq2 into f x y, g x y
Data structures converters
val to_list : 'a t -> 'a listConvert the iterator into a list. Preserves order of elements. This function is tail-recursive, but consumes 2*n memory. If order doesn't matter to you, consider to_rev_list.
val to_rev_list : 'a t -> 'a listGet the list of the reversed iterator (more efficient than to_list)
val of_list : 'a list -> 'a ton_list f l is equivalent to to_list @@ f @@ of_list l.
val to_array : 'a t -> 'a arrayConvert to an array. Currently not very efficient because an intermediate list is used.
val of_array : 'a array -> 'a tval of_array_i : 'a array -> (int * 'a) tElements of the array, with their index
val array_slice : 'a array -> int -> int -> 'a tarray_slice a i j Iterator of elements whose indexes range from i to j
val of_opt : 'a option -> 'a tIterate on 0 or 1 values.
val of_seq : 'a Stdlib.Seq.t -> 'a tIterator of elements of a Seq.t.
val to_seq_persistent : 'a t -> 'a Stdlib.Seq.tConvert to a Seq. Linear in memory and time (a copy is made in memory). This does not work on infinite iterators.
val to_stack : 'a Stdlib.Stack.t -> 'a t -> unitPush elements of the iterator on the stack
val of_stack : 'a Stdlib.Stack.t -> 'a tIterator of elements of the stack (same order as Stack.iter)
val to_queue : 'a Stdlib.Queue.t -> 'a t -> unitPush elements of the iterator into the queue
val of_queue : 'a Stdlib.Queue.t -> 'a tIterator of elements contained in the queue, FIFO order
val hashtbl_add : ('a, 'b) Stdlib.Hashtbl.t -> ('a * 'b) t -> unitAdd elements of the iterator to the hashtable, with Hashtbl.add
val hashtbl_replace : ('a, 'b) Stdlib.Hashtbl.t -> ('a * 'b) t -> unitAdd elements of the iterator to the hashtable, with Hashtbl.replace (erases conflicting bindings)
val to_hashtbl : ('a * 'b) t -> ('a, 'b) Stdlib.Hashtbl.tBuild a hashtable from an iterator of key/value pairs
val of_hashtbl : ('a, 'b) Stdlib.Hashtbl.t -> ('a * 'b) tIterator of key/value pairs from the hashtable
val hashtbl_keys : ('a, 'b) Stdlib.Hashtbl.t -> 'a tval hashtbl_values : ('a, 'b) Stdlib.Hashtbl.t -> 'b tval of_str : string -> char tval to_str : char t -> stringval concat_str : string t -> stringConcatenate strings together, eagerly. Also see intersperse to add a separator.
Raised when the user tries to iterate several times on a transient iterator
val of_in_channel : Stdlib.in_channel -> char tIterates on characters of the input (can block when one iterates over the iterator). If you need to iterate several times on this iterator, use persistent.
val to_buffer : char t -> Stdlib.Buffer.t -> unitCopy content of the iterator into the buffer
val int_range : start:int -> stop:int -> int tIterator on integers in start...stop by steps 1. Also see (--) for an infix version.
val int_range_dec : start:int -> stop:int -> int tIterator on decreasing integers in stop...start by steps -1. See (--^) for an infix version
val int_range_by : step:int -> int -> int -> int tint_range_by ~step i j is the range starting at i, including j, where the difference between successive elements is step. use a negative step for a decreasing iterator.
val bools : bool tIterates on true and false
val of_set :
+ ('a * 'b list) tgroup_join_by key2 associates to every element x of the first iterator, all the elements y of the second iterator such that eq x (key y). Elements of the first iterators without corresponding values in the second one are mapped to [] precondition: for any x and y, if eq x y then hash x=hash y must hold.
Set-like
Intersection of two collections. Each element will occur at most once in the result. Eager. precondition: for any x and y, if eq x y then hash x=hash y must hold.
Union of two collections. Each element will occur at most once in the result. Eager. precondition: for any x and y, if eq x y then hash x=hash y must hold.
subset a b returns true if all elements of a belong to b. Eager. precondition: for any x and y, if eq x y then hash x=hash y must hold.
Arithmetic
val max : ?lt:('a -> 'a -> bool) -> 'a t -> 'a optionMax element of the iterator, using the given comparison function.
val min : ?lt:('a -> 'a -> bool) -> 'a t -> 'a optionMin element of the iterator, using the given comparison function. see max for more details.
val sum : int t -> intSum of elements
val sumf : float t -> floatSum of elements, using Kahan summation
List-like
val head : 'a t -> 'a optionFirst element, if any, otherwise None
val head_exn : 'a t -> 'aFirst element, if any, fails
Take at most n elements from the iterator. Works on infinite iterators.
Take elements while they satisfy the predicate, then stops iterating. Will work on an infinite iterator s if the predicate is false for at least one element of s.
Maps over elements of the iterator, stopping early if the mapped function returns `Stop or `Return x. At each iteration:
- If
f returns `Yield y, y is added to the sequence and the iteration continues. - If
f returns `Stop, nothing is added to the sequence and the iteration stops. - If
f returns `Return y, y is added to the sequence and the iteration stops.
val fold_while : ('a -> 'b -> 'a * [ `Stop | `Continue ]) -> 'a -> 'b t -> 'aFolds over elements of the iterator, stopping early if the accumulator returns ('a, `Stop)
Reverse the iterator. O(n) memory and time, needs the iterator to be finite. The result is persistent and does not depend on the input being repeatable.
Pair iterators
val fold2 : ('c -> 'a -> 'b -> 'c) -> 'c -> ('a * 'b) t -> 'cval iter2 : ('a -> 'b -> unit) -> ('a * 'b) t -> unitmap2_2 f g seq2 maps each x, y of seq2 into f x y, g x y
Data structures converters
val to_list : 'a t -> 'a listConvert the iterator into a list. Preserves order of elements. This function is tail-recursive, but consumes 2*n memory. If order doesn't matter to you, consider to_rev_list.
val to_rev_list : 'a t -> 'a listGet the list of the reversed iterator (more efficient than to_list)
val of_list : 'a list -> 'a ton_list f l is equivalent to to_list @@ f @@ of_list l.
val to_array : 'a t -> 'a arrayConvert to an array. Currently not very efficient because an intermediate list is used.
val of_array : 'a array -> 'a tval of_array_i : 'a array -> (int * 'a) tElements of the array, with their index
val array_slice : 'a array -> int -> int -> 'a tarray_slice a i j Iterator of elements whose indexes range from i to j
val of_opt : 'a option -> 'a tIterate on 0 or 1 values.
val of_seq : 'a Stdlib.Seq.t -> 'a tIterator of elements of a Seq.t.
val to_seq_persistent : 'a t -> 'a Stdlib.Seq.tConvert to a Seq. Linear in memory and time (a copy is made in memory). This does not work on infinite iterators.
val to_stack : 'a Stdlib.Stack.t -> 'a t -> unitPush elements of the iterator on the stack
val of_stack : 'a Stdlib.Stack.t -> 'a tIterator of elements of the stack (same order as Stack.iter)
val to_queue : 'a Stdlib.Queue.t -> 'a t -> unitPush elements of the iterator into the queue
val of_queue : 'a Stdlib.Queue.t -> 'a tIterator of elements contained in the queue, FIFO order
val hashtbl_add : ('a, 'b) Stdlib.Hashtbl.t -> ('a * 'b) t -> unitAdd elements of the iterator to the hashtable, with Hashtbl.add
val hashtbl_replace : ('a, 'b) Stdlib.Hashtbl.t -> ('a * 'b) t -> unitAdd elements of the iterator to the hashtable, with Hashtbl.replace (erases conflicting bindings)
val to_hashtbl : ('a * 'b) t -> ('a, 'b) Stdlib.Hashtbl.tBuild a hashtable from an iterator of key/value pairs
val of_hashtbl : ('a, 'b) Stdlib.Hashtbl.t -> ('a * 'b) tIterator of key/value pairs from the hashtable
val hashtbl_keys : ('a, 'b) Stdlib.Hashtbl.t -> 'a tval hashtbl_values : ('a, 'b) Stdlib.Hashtbl.t -> 'b tval of_str : string -> char tval to_str : char t -> stringval concat_str : string t -> stringConcatenate strings together, eagerly. Also see intersperse to add a separator.
Raised when the user tries to iterate several times on a transient iterator
val of_in_channel : Stdlib.in_channel -> char tIterates on characters of the input (can block when one iterates over the iterator). If you need to iterate several times on this iterator, use persistent.
val to_buffer : char t -> Stdlib.Buffer.t -> unitCopy content of the iterator into the buffer
val int_range : start:int -> stop:int -> int tIterator on integers in start...stop by steps 1. Also see (--) for an infix version.
val int_range_dec : start:int -> stop:int -> int tIterator on decreasing integers in stop...start by steps -1. See (--^) for an infix version
val int_range_by : step:int -> int -> int -> int tint_range_by ~step i j is the range starting at i, including j, where the difference between successive elements is step. use a negative step for a decreasing iterator.
val bools : bool tIterates on true and false
val of_set :
(module Stdlib.Set.S with type elt = 'a and type t = 'b) ->
'b ->
'a tConvert the given set to an iterator. The set module must be provided.
val to_set :
diff --git a/doc/iter/IterBigarray/.dummy b/doc/iter/IterBigarray/.dummy
deleted file mode 100644
index e69de29..0000000
diff --git a/doc/iter/IterBigarray/index.html b/doc/iter/IterBigarray/index.html
index eb7059d..b62a2f1 100644
--- a/doc/iter/IterBigarray/index.html
+++ b/doc/iter/IterBigarray/index.html
@@ -1,2 +1,2 @@
-IterBigarray (iter.IterBigarray) Module IterBigarray
Interface and Helpers for bigarrays
val of_bigarray : ('a, _, _) Stdlib.Bigarray.Array1.t -> 'a Iter.tIterate on the elements of a 1-D array
val mmap : string -> char Iter.tMap the file into memory, and read the characters.
\ No newline at end of file
+IterBigarray (iter.IterBigarray) Module IterBigarray
Interface and Helpers for bigarrays
val of_bigarray : ('a, _, _) Stdlib.Bigarray.Array1.t -> 'a Iter.tIterate on the elements of a 1-D array
val mmap : string -> char Iter.tMap the file into memory, and read the characters.
\ No newline at end of file
diff --git a/doc/iter/IterLabels/.dummy b/doc/iter/IterLabels/.dummy
deleted file mode 100644
index e69de29..0000000
diff --git a/doc/iter/IterLabels/IO/index.html b/doc/iter/IterLabels/IO/index.html
index eb00046..d917ed5 100644
--- a/doc/iter/IterLabels/IO/index.html
+++ b/doc/iter/IterLabels/IO/index.html
@@ -1,5 +1,5 @@
-IO (iter.IterLabels.IO) Module IterLabels.IO
val lines_of : ?mode:int -> ?flags:Stdlib.open_flag list -> string -> string tlines_of filename reads all lines of the given file. It raises the same exception as would opening the file and read from it, except from End_of_file (which is caught). The file is always properly closed. Every time the iterator is iterated on, the file is opened again, so different iterations might return different results
val chunks_of :
+IO (iter.IterLabels.IO) Module IterLabels.IO
val lines_of : ?mode:int -> ?flags:Stdlib.open_flag list -> string -> string tlines_of filename reads all lines of the given file. It raises the same exception as would opening the file and read from it, except from End_of_file (which is caught). The file is always properly closed. Every time the iterator is iterated on, the file is opened again, so different iterations might return different results
val chunks_of :
?mode:int ->
?flags:Stdlib.open_flag list ->
?size:int ->
diff --git a/doc/iter/IterLabels/Infix/index.html b/doc/iter/IterLabels/Infix/index.html
index 3f70aeb..436d348 100644
--- a/doc/iter/IterLabels/Infix/index.html
+++ b/doc/iter/IterLabels/Infix/index.html
@@ -1,2 +1,2 @@
-Infix (iter.IterLabels.Infix) Module IterLabels.Infix
val (--) : int -> int -> int ta -- b is the range of integers from a to b, both included, in increasing order. It will therefore be empty if a > b.
val (--^) : int -> int -> int ta --^ b is the range of integers from b to a, both included, in decreasing order (starts from a). It will therefore be empty if a < b.
\ No newline at end of file
+Infix (iter.IterLabels.Infix) Module IterLabels.Infix
val (--) : int -> int -> int ta -- b is the range of integers from a to b, both included, in increasing order. It will therefore be empty if a > b.
val (--^) : int -> int -> int ta --^ b is the range of integers from b to a, both included, in decreasing order (starts from a). It will therefore be empty if a < b.
\ No newline at end of file
diff --git a/doc/iter/IterLabels/Map/Adapt/index.html b/doc/iter/IterLabels/Map/Adapt/index.html
index b3f80a8..205e8b5 100644
--- a/doc/iter/IterLabels/Map/Adapt/index.html
+++ b/doc/iter/IterLabels/Map/Adapt/index.html
@@ -1,6 +1,6 @@
-Adapt (iter.IterLabels.Map.Adapt) Module Map.Adapt
Adapt a pre-existing Map module to make it iterator-aware
Parameters
Signature
include Stdlib.Map.S with type key = M.key with type 'a t = 'a M.t
val empty : 'a tval is_empty : 'a t -> boolval cardinal : 'a t -> intval is_empty : 'a t -> bool
\ No newline at end of file
diff --git a/doc/iter/IterLabels/Map/Make/index.html b/doc/iter/IterLabels/Map/Make/index.html
index c62c314..515f469 100644
--- a/doc/iter/IterLabels/Map/Make/index.html
+++ b/doc/iter/IterLabels/Map/Make/index.html
@@ -1,6 +1,6 @@
-Make (iter.IterLabels.Map.Make) Module Map.Make
Create an enriched Map module, with iterator-aware functions
Parameters
Signature
include Stdlib.Map.S with type key = V.t
val empty : 'a tval is_empty : 'a t -> boolval cardinal : 'a t -> intval is_empty : 'a t -> bool
\ No newline at end of file
diff --git a/doc/iter/IterLabels/Map/index.html b/doc/iter/IterLabels/Map/index.html
index a884be8..4147235 100644
--- a/doc/iter/IterLabels/Map/index.html
+++ b/doc/iter/IterLabels/Map/index.html
@@ -1,4 +1,4 @@
-Map (iter.IterLabels.Map) Module IterLabels.Map
module type S = sig ... endmodule Adapt
+Map (iter.IterLabels.Map) Module IterLabels.Map
module type S = sig ... endAdapt a pre-existing Map module to make it iterator-aware
\ No newline at end of file
diff --git a/doc/iter/IterLabels/Map/module-type-S/index.html b/doc/iter/IterLabels/Map/module-type-S/index.html
index d5fe52c..e816813 100644
--- a/doc/iter/IterLabels/Map/module-type-S/index.html
+++ b/doc/iter/IterLabels/Map/module-type-S/index.html
@@ -1,6 +1,6 @@
-S (iter.IterLabels.Map.S) Module type Map.S
\ No newline at end of file
diff --git a/doc/iter/IterLabels/Set/Adapt/index.html b/doc/iter/IterLabels/Set/Adapt/index.html
index 1be6d2c..c12351f 100644
--- a/doc/iter/IterLabels/Set/Adapt/index.html
+++ b/doc/iter/IterLabels/Set/Adapt/index.html
@@ -1,2 +1,2 @@
-Adapt (iter.IterLabels.Set.Adapt) Module Set.Adapt
Create an enriched Set module from the given one
Parameters
Signature
\ No newline at end of file
+Adapt (iter.IterLabels.Set.Adapt) Module Set.Adapt
Create an enriched Set module from the given one
Parameters
Signature
\ No newline at end of file
diff --git a/doc/iter/IterLabels/Set/Make/index.html b/doc/iter/IterLabels/Set/Make/index.html
index 4ef0eda..74252e2 100644
--- a/doc/iter/IterLabels/Set/Make/index.html
+++ b/doc/iter/IterLabels/Set/Make/index.html
@@ -1,2 +1,2 @@
-Make (iter.IterLabels.Set.Make) Module Set.Make
Functor to build an extended Set module from an ordered type
Parameters
Signature
\ No newline at end of file
+Make (iter.IterLabels.Set.Make) Module Set.Make
Functor to build an extended Set module from an ordered type
Parameters
Signature
\ No newline at end of file
diff --git a/doc/iter/IterLabels/Set/index.html b/doc/iter/IterLabels/Set/index.html
index e0f55f2..bd44344 100644
--- a/doc/iter/IterLabels/Set/index.html
+++ b/doc/iter/IterLabels/Set/index.html
@@ -1,2 +1,2 @@
-Set (iter.IterLabels.Set) Module IterLabels.Set
module type S = sig ... endCreate an enriched Set module from the given one
\ No newline at end of file
+Set (iter.IterLabels.Set) Module IterLabels.Set
module type S = sig ... endCreate an enriched Set module from the given one
\ No newline at end of file
diff --git a/doc/iter/IterLabels/Set/module-type-S/index.html b/doc/iter/IterLabels/Set/module-type-S/index.html
index 5f842c2..b8e56e3 100644
--- a/doc/iter/IterLabels/Set/module-type-S/index.html
+++ b/doc/iter/IterLabels/Set/module-type-S/index.html
@@ -1,2 +1,2 @@
-S (iter.IterLabels.Set.S) Module type Set.S
\ No newline at end of file
+S (iter.IterLabels.Set.S) Module type Set.S
\ No newline at end of file
diff --git a/doc/iter/IterLabels/index.html b/doc/iter/IterLabels/index.html
index 89fbf11..f6cbdcb 100644
--- a/doc/iter/IterLabels/index.html
+++ b/doc/iter/IterLabels/index.html
@@ -1,5 +1,5 @@
-IterLabels (iter.IterLabels) Module IterLabels
Simple and Efficient Iterators
Version of Iterator with labels
An iterator of values of type 'a. If you give it a function 'a -> unit it will be applied to every element of the iterator successively.
type +'a iter = 'a tNOTE Type ('a, 'b) t2 = ('a -> 'b -> unit) -> unit has been removed and subsumed by ('a * 'b) t
Creation
val from_iter : (('a -> unit) -> unit) -> 'a tBuild an iterator from a iter function
val from_labelled_iter : (f:('a -> unit) -> unit) -> 'a tBuild an iterator from a labelled iter function
val from_fun : (unit -> 'a option) -> 'a tCall the function repeatedly until it returns None. This iterator is transient, use persistent if needed!
val empty : 'a tEmpty iterator. It contains no element.
val singleton : 'a -> 'a tSingleton iterator, with exactly one element.
val doubleton : 'a -> 'a -> 'a tIterator with exactly two elements
val init : f:(int -> 'a) -> 'a tinit f is the infinite iterator f 0; f 1; f 2; ….
val repeat : 'a -> 'a tInfinite iterator of the same element. You may want to look at take and the likes if you iterate on it.
val iterate : ('a -> 'a) -> 'a -> 'a titerate f x is the infinite iterator x, f(x), f(f(x)), ...
val forever : (unit -> 'b) -> 'b tIterator that calls the given function to produce elements. The iterator may be transient (depending on the function), and definitely is infinite. You may want to use take and persistent.
Cycle forever through the given iterator. Assume the given iterator can be traversed any amount of times (not transient). This yields an infinite iterator, you should use something like take not to loop forever.
Consumption
val iter : f:('a -> unit) -> 'a t -> unitConsume the iterator, passing all its arguments to the function. Basically iter f seq is just seq f.
val iteri : f:(int -> 'a -> unit) -> 'a t -> unitIterate on elements and their index in the iterator
val for_each : seq:'a t -> ('a -> unit) -> unitConsume the iterator, passing all its arguments to the function. for_each seq f is the same as iter f seq, i.e., iter with arguments reversed.
val for_eachi : seq:'a t -> (int -> 'a -> unit) -> unitIterate on elements and their index in the iterator. for_eachi seq f is the same as iteri f seq, i.e., iteri with arguments reversed.
val fold : f:('a -> 'b -> 'a) -> init:'a -> 'b t -> 'aFold over elements of the iterator, consuming it
val foldi : f:('a -> int -> 'b -> 'a) -> init:'a -> 'b t -> 'aFold over elements of the iterator and their index, consuming it
val fold_filter_map :
+IterLabels (iter.IterLabels) Module IterLabels
Simple and Efficient Iterators
Version of Iterator with labels
An iterator of values of type 'a. If you give it a function 'a -> unit it will be applied to every element of the iterator successively.
type +'a iter = 'a tNOTE Type ('a, 'b) t2 = ('a -> 'b -> unit) -> unit has been removed and subsumed by ('a * 'b) t
Creation
val from_iter : (('a -> unit) -> unit) -> 'a tBuild an iterator from a iter function
val from_labelled_iter : (f:('a -> unit) -> unit) -> 'a tBuild an iterator from a labelled iter function
val from_fun : (unit -> 'a option) -> 'a tCall the function repeatedly until it returns None. This iterator is transient, use persistent if needed!
val empty : 'a tEmpty iterator. It contains no element.
val singleton : 'a -> 'a tSingleton iterator, with exactly one element.
val doubleton : 'a -> 'a -> 'a tIterator with exactly two elements
val init : f:(int -> 'a) -> 'a tinit f is the infinite iterator f 0; f 1; f 2; ….
val repeat : 'a -> 'a tInfinite iterator of the same element. You may want to look at take and the likes if you iterate on it.
val iterate : ('a -> 'a) -> 'a -> 'a titerate f x is the infinite iterator x, f(x), f(f(x)), ...
val forever : (unit -> 'b) -> 'b tIterator that calls the given function to produce elements. The iterator may be transient (depending on the function), and definitely is infinite. You may want to use take and persistent.
Cycle forever through the given iterator. Assume the given iterator can be traversed any amount of times (not transient). This yields an infinite iterator, you should use something like take not to loop forever.
Consumption
val iter : f:('a -> unit) -> 'a t -> unitConsume the iterator, passing all its arguments to the function. Basically iter f seq is just seq f.
val iteri : f:(int -> 'a -> unit) -> 'a t -> unitIterate on elements and their index in the iterator
val for_each : seq:'a t -> ('a -> unit) -> unitConsume the iterator, passing all its arguments to the function. for_each seq f is the same as iter f seq, i.e., iter with arguments reversed.
val for_eachi : seq:'a t -> (int -> 'a -> unit) -> unitIterate on elements and their index in the iterator. for_eachi seq f is the same as iteri f seq, i.e., iteri with arguments reversed.
val fold : f:('a -> 'b -> 'a) -> init:'a -> 'b t -> 'aFold over elements of the iterator, consuming it
val foldi : f:('a -> int -> 'b -> 'a) -> init:'a -> 'b t -> 'aFold over elements of the iterator and their index, consuming it
val fold_filter_map :
f:('acc -> 'a -> 'acc * 'b option) ->
init:'acc ->
'a t ->
diff --git a/doc/iter/index.html b/doc/iter/index.html
index 0b4aa8a..776984d 100644
--- a/doc/iter/index.html
+++ b/doc/iter/index.html
@@ -1,2 +1,2 @@
-index (iter.index) iter index
Library iter
This library exposes the following toplevel modules:
Iter Simple and Efficient Iterators.IterLabels
Library iter.bigarray
The entry point of this library is the module: IterBigarray.
\ No newline at end of file
+index (iter.index) iter index
Library iter
This library exposes the following toplevel modules:
Iter Simple and Efficient Iterators.IterLabels
Library iter.bigarray
The entry point of this library is the module: IterBigarray.
\ No newline at end of file
diff --git a/doc/_odoc_support/fonts/KaTeX_AMS-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_AMS-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_AMS-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_AMS-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Caligraphic-Bold.woff2 b/doc/odoc.support/fonts/KaTeX_Caligraphic-Bold.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Caligraphic-Bold.woff2
rename to doc/odoc.support/fonts/KaTeX_Caligraphic-Bold.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Caligraphic-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_Caligraphic-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Caligraphic-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_Caligraphic-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Fraktur-Bold.woff2 b/doc/odoc.support/fonts/KaTeX_Fraktur-Bold.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Fraktur-Bold.woff2
rename to doc/odoc.support/fonts/KaTeX_Fraktur-Bold.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Fraktur-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_Fraktur-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Fraktur-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_Fraktur-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Main-Bold.woff2 b/doc/odoc.support/fonts/KaTeX_Main-Bold.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Main-Bold.woff2
rename to doc/odoc.support/fonts/KaTeX_Main-Bold.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Main-BoldItalic.woff2 b/doc/odoc.support/fonts/KaTeX_Main-BoldItalic.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Main-BoldItalic.woff2
rename to doc/odoc.support/fonts/KaTeX_Main-BoldItalic.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Main-Italic.woff2 b/doc/odoc.support/fonts/KaTeX_Main-Italic.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Main-Italic.woff2
rename to doc/odoc.support/fonts/KaTeX_Main-Italic.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Main-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_Main-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Main-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_Main-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Math-BoldItalic.woff2 b/doc/odoc.support/fonts/KaTeX_Math-BoldItalic.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Math-BoldItalic.woff2
rename to doc/odoc.support/fonts/KaTeX_Math-BoldItalic.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Math-Italic.woff2 b/doc/odoc.support/fonts/KaTeX_Math-Italic.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Math-Italic.woff2
rename to doc/odoc.support/fonts/KaTeX_Math-Italic.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_SansSerif-Bold.woff2 b/doc/odoc.support/fonts/KaTeX_SansSerif-Bold.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_SansSerif-Bold.woff2
rename to doc/odoc.support/fonts/KaTeX_SansSerif-Bold.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_SansSerif-Italic.woff2 b/doc/odoc.support/fonts/KaTeX_SansSerif-Italic.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_SansSerif-Italic.woff2
rename to doc/odoc.support/fonts/KaTeX_SansSerif-Italic.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_SansSerif-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_SansSerif-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_SansSerif-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_SansSerif-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Script-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_Script-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Script-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_Script-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Size1-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_Size1-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Size1-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_Size1-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Size2-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_Size2-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Size2-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_Size2-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Size3-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_Size3-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Size3-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_Size3-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Size4-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_Size4-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Size4-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_Size4-Regular.woff2
diff --git a/doc/_odoc_support/fonts/KaTeX_Typewriter-Regular.woff2 b/doc/odoc.support/fonts/KaTeX_Typewriter-Regular.woff2
similarity index 100%
rename from doc/_odoc_support/fonts/KaTeX_Typewriter-Regular.woff2
rename to doc/odoc.support/fonts/KaTeX_Typewriter-Regular.woff2
diff --git a/doc/_odoc_support/highlight.pack.js b/doc/odoc.support/highlight.pack.js
similarity index 100%
rename from doc/_odoc_support/highlight.pack.js
rename to doc/odoc.support/highlight.pack.js
diff --git a/doc/_odoc_support/katex.min.css b/doc/odoc.support/katex.min.css
similarity index 100%
rename from doc/_odoc_support/katex.min.css
rename to doc/odoc.support/katex.min.css
diff --git a/doc/_odoc_support/katex.min.js b/doc/odoc.support/katex.min.js
similarity index 100%
rename from doc/_odoc_support/katex.min.js
rename to doc/odoc.support/katex.min.js
diff --git a/doc/_odoc_support/odoc.css b/doc/odoc.support/odoc.css
similarity index 100%
rename from doc/_odoc_support/odoc.css
rename to doc/odoc.support/odoc.css