module Random_selection: Random_selection
type 'a t 
a random sample of 'a values
val create : ?random_state:Core.Std.Random.State.t -> int -> 'a t
create ~random_state desired_sample_size creates an empty sample of 'a values.
    The sample will grow no larger than desired_sample_size when presented with more 
    values by calling add.
val desired_sample_size : 'a t -> int
the desired sample size
val maybe_add : 'a t -> 'a -> unit
maybe_add t x will randomly either add x to t or ignore it. If adding x
    would grow the sample larger than desired_sample_size t, some previously selected
    value will be discarded.
val to_list : 'a t -> 'a list
the current selection from values previously seen by t.  Of all previously seen
    values, each subset of size desired_sample_size t is equally likely to have
    been selected.
val select : ?random_state:Core.Std.Random.State.t ->
       next:(unit -> 'a option) -> int -> 'a list
randomly select a subset of size sample_size from a stream of unknown length.
    Each possible subset is chosen with equal probability.