sig
  type 'a t
  type 'a sized = int -> 'QCheck2.Gen.t
  val unit : unit QCheck2.Gen.t
  val bool : bool QCheck2.Gen.t
  val int : int QCheck2.Gen.t
  val pint : ?origin:int -> int QCheck2.Gen.t
  val small_nat : int QCheck2.Gen.t
  val nat : int QCheck2.Gen.t
  val big_nat : int QCheck2.Gen.t
  val neg_int : int QCheck2.Gen.t
  val small_int : int QCheck2.Gen.t
  val small_signed_int : int QCheck2.Gen.t
  val small_int_corners : unit -> int QCheck2.Gen.t
  val int32 : int32 QCheck2.Gen.t
  val ui32 : int32 QCheck2.Gen.t
  val int64 : int64 QCheck2.Gen.t
  val ui64 : int64 QCheck2.Gen.t
  val float : float QCheck2.Gen.t
  val pfloat : float QCheck2.Gen.t
  val nfloat : float QCheck2.Gen.t
  val char : char QCheck2.Gen.t
  val printable : char QCheck2.Gen.t
  val numeral : char QCheck2.Gen.t
  val string_size :
    ?gen:char QCheck2.Gen.t -> int QCheck2.Gen.t -> string QCheck2.Gen.t
  val string : string QCheck2.Gen.t
  val string_of : char QCheck2.Gen.t -> string QCheck2.Gen.t
  val string_printable : string QCheck2.Gen.t
  val small_string : ?gen:char QCheck2.Gen.t -> string QCheck2.Gen.t
  val pure : '-> 'QCheck2.Gen.t
  val return : '-> 'QCheck2.Gen.t
  val make_primitive :
    gen:(Stdlib.Random.State.t -> 'a) ->
    shrink:('-> 'Stdlib.Seq.t) -> 'QCheck2.Gen.t
  val add_shrink_invariant :
    ('-> bool) -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
  val int_bound : int -> int QCheck2.Gen.t
  val int_range : ?origin:int -> int -> int -> int QCheck2.Gen.t
  val ( -- ) : int -> int -> int QCheck2.Gen.t
  val float_bound_inclusive : ?origin:float -> float -> float QCheck2.Gen.t
  val float_bound_exclusive : ?origin:float -> float -> float QCheck2.Gen.t
  val float_range : ?origin:float -> float -> float -> float QCheck2.Gen.t
  val ( --. ) : float -> float -> float QCheck2.Gen.t
  val char_range : ?origin:char -> char -> char -> char QCheck2.Gen.t
  val oneof : 'QCheck2.Gen.t list -> 'QCheck2.Gen.t
  val oneofl : 'a list -> 'QCheck2.Gen.t
  val oneofa : 'a array -> 'QCheck2.Gen.t
  val frequency : (int * 'QCheck2.Gen.t) list -> 'QCheck2.Gen.t
  val frequencyl : (int * 'a) list -> 'QCheck2.Gen.t
  val frequencya : (int * 'a) array -> 'QCheck2.Gen.t
  val shuffle_a : 'a array -> 'a array QCheck2.Gen.t
  val shuffle_l : 'a list -> 'a list QCheck2.Gen.t
  val shuffle_w_l : (int * 'a) list -> 'a list QCheck2.Gen.t
  val graft_corners : 'QCheck2.Gen.t -> 'a list -> unit -> 'QCheck2.Gen.t
  val int_pos_corners : int list
  val int_corners : int list
  val list : 'QCheck2.Gen.t -> 'a list QCheck2.Gen.t
  val small_list : 'QCheck2.Gen.t -> 'a list QCheck2.Gen.t
  val list_size :
    int QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'a list QCheck2.Gen.t
  val list_repeat : int -> 'QCheck2.Gen.t -> 'a list QCheck2.Gen.t
  val array : 'QCheck2.Gen.t -> 'a array QCheck2.Gen.t
  val array_size :
    int QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'a array QCheck2.Gen.t
  val small_array : 'QCheck2.Gen.t -> 'a array QCheck2.Gen.t
  val array_repeat : int -> 'QCheck2.Gen.t -> 'a array QCheck2.Gen.t
  val opt : ?ratio:float -> 'QCheck2.Gen.t -> 'a option QCheck2.Gen.t
  val pair : 'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b) QCheck2.Gen.t
  val triple :
    'QCheck2.Gen.t ->
    'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b * 'c) QCheck2.Gen.t
  val quad :
    'QCheck2.Gen.t ->
    'QCheck2.Gen.t ->
    'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b * 'c * 'd) QCheck2.Gen.t
  val flatten_l : 'QCheck2.Gen.t list -> 'a list QCheck2.Gen.t
  val flatten_a : 'QCheck2.Gen.t array -> 'a array QCheck2.Gen.t
  val flatten_opt : 'QCheck2.Gen.t option -> 'a option QCheck2.Gen.t
  val flatten_res :
    ('QCheck2.Gen.t, 'e) Stdlib.result ->
    ('a, 'e) Stdlib.result QCheck2.Gen.t
  val join : 'QCheck2.Gen.t QCheck2.Gen.t -> 'QCheck2.Gen.t
  val sized : 'QCheck2.Gen.sized -> 'QCheck2.Gen.t
  val sized_size :
    int QCheck2.Gen.t -> 'QCheck2.Gen.sized -> 'QCheck2.Gen.t
  val fix :
    (('-> 'QCheck2.Gen.t) -> '-> 'QCheck2.Gen.t) ->
    '-> 'QCheck2.Gen.t
  val delay : (unit -> 'QCheck2.Gen.t) -> 'QCheck2.Gen.t
  val map : ('-> 'b) -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
  val ( >|= ) : 'QCheck2.Gen.t -> ('-> 'b) -> 'QCheck2.Gen.t
  val ( <$> ) : ('-> 'b) -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
  val map2 :
    ('-> '-> 'c) ->
    'QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
  val map3 :
    ('-> '-> '-> 'd) ->
    'QCheck2.Gen.t ->
    'QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
  val ap : ('-> 'b) QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
  val ( <*> ) :
    ('-> 'b) QCheck2.Gen.t -> 'QCheck2.Gen.t -> 'QCheck2.Gen.t
  val bind : 'QCheck2.Gen.t -> ('-> 'QCheck2.Gen.t) -> 'QCheck2.Gen.t
  val ( >>= ) :
    'QCheck2.Gen.t -> ('-> 'QCheck2.Gen.t) -> 'QCheck2.Gen.t
  val ( let+ ) : 'QCheck2.Gen.t -> ('-> 'b) -> 'QCheck2.Gen.t
  val ( and+ ) :
    'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b) QCheck2.Gen.t
  val ( let* ) :
    'QCheck2.Gen.t -> ('-> 'QCheck2.Gen.t) -> 'QCheck2.Gen.t
  val ( and* ) :
    'QCheck2.Gen.t -> 'QCheck2.Gen.t -> ('a * 'b) QCheck2.Gen.t
  val generate :
    ?rand:Stdlib.Random.State.t -> n:int -> 'QCheck2.Gen.t -> 'a list
  val generate1 : ?rand:Stdlib.Random.State.t -> 'QCheck2.Gen.t -> 'a
  val generate_tree :
    ?rand:Stdlib.Random.State.t -> 'QCheck2.Gen.t -> 'QCheck2.Tree.t
end