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