Module Support.Gen

include module type of Gen
type !'a t = unit -> 'a option
type !'a gen = 'a t
module type S = Gen_intf.S
val get : 'a t -> 'a option
val next : 'a t -> 'a option
val get_exn : 'a t -> 'a
val junk : 'a t -> unit
val repeatedly : (unit -> 'a) -> 'a t
val empty : 'a gen
val singleton : 'a -> 'a gen
val return : 'a -> 'a gen
val repeat : 'a -> 'a gen
val iterate : 'a -> ('a -> 'a) -> 'a gen
val unfold : ('b -> ('a * 'b) option) -> 'b -> 'a gen
val init : ?limit:int -> (int -> 'a) -> 'a gen
val is_empty : 'a gen -> bool
val fold : ('b -> 'a -> 'b) -> 'b -> 'a gen -> 'b
val reduce : ('a -> 'a -> 'a) -> 'a gen -> 'a
val scan : ('b -> 'a -> 'b) -> 'b -> 'a gen -> 'b gen
val unfold_scan : ('b -> 'a -> 'b * 'c) -> 'b -> 'a gen -> 'c gen
val iter : ('a -> unit) -> 'a gen -> unit
val iteri : (int -> 'a -> unit) -> 'a gen -> unit
val length : 'a gen -> int
val map : ('a -> 'b) -> 'a gen -> 'b gen
val mapi : (int -> 'a -> 'b) -> 'a gen -> 'b gen
val fold_map : ('b -> 'a -> 'b) -> 'b -> 'a gen -> 'b gen
val append : 'a gen -> 'a gen -> 'a gen
val flatten : 'a Gen_intf.gen gen -> 'a gen
val flat_map : ('a -> 'b Gen_intf.gen) -> 'a gen -> 'b gen
val mem : ?eq:('a -> 'a -> bool) -> 'a -> 'a gen -> bool
val take : int -> 'a gen -> 'a gen
val drop : int -> 'a gen -> 'a gen
val nth : int -> 'a gen -> 'a
val take_nth : int -> 'a gen -> 'a gen
val filter : ('a -> bool) -> 'a gen -> 'a gen
val take_while : ('a -> bool) -> 'a gen -> 'a gen
val fold_while : ('a -> 'b -> 'a * [ `Continue | `Stop ]) -> 'a -> 'b gen -> 'a
val drop_while : ('a -> bool) -> 'a gen -> 'a gen
val filter_map : ('a -> 'b option) -> 'a gen -> 'b gen
val zip_index : 'a gen -> (int * 'a) gen
val unzip : ('a * 'b) gen -> 'a gen * 'b gen
val partition : ('a -> bool) -> 'a gen -> 'a gen * 'a gen
val for_all : ('a -> bool) -> 'a gen -> bool
val exists : ('a -> bool) -> 'a gen -> bool
val min : ?lt:('a -> 'a -> bool) -> 'a gen -> 'a
val max : ?lt:('a -> 'a -> bool) -> 'a gen -> 'a
val eq : ?eq:('a -> 'a -> bool) -> 'a gen -> 'a gen -> bool
val lexico : ?cmp:('a -> 'a -> int) -> 'a gen -> 'a gen -> int
val compare : ?cmp:('a -> 'a -> int) -> 'a gen -> 'a gen -> int
val find : ('a -> bool) -> 'a gen -> 'a option
val sum : int gen -> int
val map2 : ('a -> 'b -> 'c) -> 'a gen -> 'b gen -> 'c gen
val iter2 : ('a -> 'b -> unit) -> 'a gen -> 'b gen -> unit
val fold2 : ('acc -> 'a -> 'b -> 'acc) -> 'acc -> 'a gen -> 'b gen -> 'acc
val for_all2 : ('a -> 'b -> bool) -> 'a gen -> 'b gen -> bool
val exists2 : ('a -> 'b -> bool) -> 'a gen -> 'b gen -> bool
val zip_with : ('a -> 'b -> 'c) -> 'a gen -> 'b gen -> 'c gen
val zip : 'a gen -> 'b gen -> ('a * 'b) gen
val merge : 'a Gen_intf.gen gen -> 'a gen
val intersection : ?cmp:('a -> 'a -> int) -> 'a gen -> 'a gen -> 'a gen
val sorted_merge : ?cmp:('a -> 'a -> int) -> 'a gen -> 'a gen -> 'a gen
val sorted_merge_n : ?cmp:('a -> 'a -> int) -> 'a gen list -> 'a gen
val tee : ?n:int -> 'a gen -> 'a Gen_intf.gen list
val round_robin : ?n:int -> 'a gen -> 'a Gen_intf.gen list
val interleave : 'a gen -> 'a gen -> 'a gen
val intersperse : 'a -> 'a gen -> 'a gen
val product : 'a gen -> 'b gen -> ('a * 'b) gen
val group : ?eq:('a -> 'a -> bool) -> 'a gen -> 'a list gen
val uniq : ?eq:('a -> 'a -> bool) -> 'a gen -> 'a gen
val sort : ?cmp:('a -> 'a -> int) -> 'a gen -> 'a gen
val sort_uniq : ?cmp:('a -> 'a -> int) -> 'a gen -> 'a gen
val chunks : int -> 'a gen -> 'a array gen
val permutations : 'a gen -> 'a list gen
val permutations_heap : 'a gen -> 'a array gen
val combinations : int -> 'a gen -> 'a list gen
val power_set : 'a gen -> 'a list gen
val of_list : 'a list -> 'a gen
val to_list : 'a gen -> 'a list
val to_rev_list : 'a gen -> 'a list
val to_array : 'a gen -> 'a array
val of_array : ?start:int -> ?len:int -> 'a array -> 'a gen
val to_string : char gen -> string
val to_buffer : Stdlib.Buffer.t -> char gen -> unit
val rand_int : int -> int gen
val int_range : ?step:int -> int -> int -> int gen
val lines : char gen -> string gen
val unlines : string gen -> char gen
module Infix : sig ... end
val (--) : int -> int -> int gen
val (>>=) : 'a gen -> ('a -> 'b Gen_intf.gen) -> 'b gen
val (>>|) : 'a gen -> ('a -> 'b) -> 'b gen
val (>|=) : 'a gen -> ('a -> 'b) -> 'b gen
val pp : ?start:string -> ?stop:string -> ?sep:string -> ?horizontal:bool -> (Stdlib.Format.formatter -> 'a -> unit) -> Stdlib.Format.formatter -> 'a gen -> unit
val of_seq : 'a Stdlib.Seq.t -> 'a gen
val to_iter : 'a gen -> 'a Gen_intf.iter
module Restart : sig ... end
val persistent : 'a t -> 'a Restart.t
val persistent_lazy : ?caching:bool -> ?max_chunk_size:int -> 'a t -> 'a Restart.t
val persistent_to_seq : 'a t -> 'a Stdlib.Seq.t
val persistent_lazy_to_seq : ?caching:bool -> ?max_chunk_size:int -> 'a t -> 'a Stdlib.Seq.t
val peek : 'a t -> ('a * 'a option) t
val peek_n : int -> 'a t -> ('a * 'a array) t
val start : 'a Restart.t -> 'a t
module IO : sig ... end
val of_string : string -> char Gen.t

Converts a string into a generator yielding individual characters.

val of_in_channel_lines : Stdlib.in_channel -> string Gen.t

Constructs a generator yielding successive lines from an input channel until it encounters an error.

val drop_lines : 'a Gen.t -> int -> unit

drop_lines g ln drops the first ln elements from the generator g.

val line_generator : ?buffer_size:int -> char Gen.t -> string Gen.t

Transform a character generator into a line generator. This function assumes unix line endings, so it is not portable.

This function also imposes a maximum line length specified via the buffer_size optional argument. (So that it uses constant memory.)

val sequence : 'a Gen.t list -> 'a Gen.t

Sequence a list of generators into one generator. Of course, if any generator in the sequence is infinite, subsequent generators will never be pulled from.

val iter_through : ('a -> unit) -> 'a Gen.t -> 'a Gen.t

iter_through f g is a generator that will execute f on each element of g before yielding it.