package gen

  1. Overview
  2. Docs

Module GenCloneSource

Clonable Generators

Utils to save the internal state of a generator, and restart from this state. This will and should not work on any iterator, but for some of them (e.g. reading from a file, see IO) it makes a lot of sense.

  • since 0.2.3
Sourcetype 'a gen = unit -> 'a option
Sourcetype 'a t = < gen : 'a gen ; clone : 'a t >

A generator that can be cloned as many times as required.

Sourcetype 'a clonable = 'a t

Alias to 'at

Prepend method

Sourcetype 'a prependable = < gen : 'a gen ; clone : 'a prependable ; prepend : 'a -> unit >
Sourceval to_prependable : 'a t -> 'a prependable

Misc

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

Low-level Persistency

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 = []

IO

Sourcemodule IO : sig ... end
OCaml

Innovation. Community. Security.