From the paper by Jean-Christophe Filliâtre, "A persistent Union-Find data structure", see the ps version
val make : int ‑> 'a ‑> 'a tmake n x returns a persistent array of length n, with x. All the
elements of this new array are initially physically equal to x
(in the sense of the == predicate). Consequently, if x is mutable, it is
shared among all elements of the array, and modifying x through one of the
array entries will modify all other entries at the same time.
n < 0 or n > Sys.max_array_length.
If the value of x is a floating-point number, then the maximum size is
only Sys.max_array_length / 2.val init : int ‑> (int ‑> 'a) ‑> 'a tinit n f returns a persistent array of length n, with element
i initialized to the result of f i.
n < 0 or n > Sys.max_array_length.
If the value of x is a floating-point number, then the maximum size is
only Sys.max_array_length / 2.val get : 'a t ‑> int ‑> 'aget a i returns the element with index i from the array a.
n is outside the
range 0 to Array.length a - 1.set a i v sets the element index i from the array a to v.
n is outside the
range 0 to Array.length a - 1.Apply the given function to all elements of the array, and return
a persistent array initialized by the results of f. In the case of mapi,
the function is also given the index of the element.
It is equivalent to fun f t -> init (fun i -> f (get t i)).
val iter : ('a ‑> unit) ‑> 'a t ‑> unititer f t applies function f to all elements of the persistent array,
in order from element 0 to element length t - 1.
val iteri : (int ‑> 'a ‑> unit) ‑> 'a t ‑> unititer f t applies function f to all elements of the persistent array,
in order from element 0 to element length t - 1.
val fold_left : ('a ‑> 'b ‑> 'a) ‑> 'a ‑> 'b t ‑> 'aval of_list : 'a list ‑> 'a tof_list l returns a fresh persistent array containing the elements of l.
val of_rev_list : 'a list ‑> 'a tof_rev_list l is the same as of_list (List.rev l) but more efficient.