Module GenMListSource
Efficient Mutable Lists
Unrolled lists, append-only, used for storing the content of a generator.
Example:
let g = 1 -- 1000 ;;
val g : int t = <fun>
let c = g |> MList.of_gen_lazy |> MList.to_clonable;;
val c : int clonable = <obj>
c#next |> take 500 |> to_list;;
- : int list = [1; 2; 3; .....; 500]
let c' = c#clone ;;
val c' : int clonable = <obj>
c |> to_list;;
- : int list = [501; 502; ....; 1000]
c'#gen |> to_list;; (* c consumed, but not c' *)
- : int list = [501; 502; ....; 1000]
c#gen |> to_list;;
- : int list = []An internal append-only storage of elements of type 'a, produced from a generator
of_gen g consumes g to build a mlist
of_gen_lazy g makes a mlist that will read from g as required, until g is exhausted. Do not use g directly after this, or some elements will be absent from the mlist!
Iterate on the mlist. This function can be called many times without any problem, the mlist isn't consumable!
Iterate on the mlist using the standard functional iterators.