sig   val ( ==> ) : bool -> bool -> bool   val assume : bool -> unit   val assume_fail : unit -> 'a   module Gen :     sig       type 'a t = Random.State.t -> 'a       type 'a sized = int -> Random.State.t -> 'a       val return : '-> '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 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 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 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 : '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 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 small_string : ?gen:char QCheck.Gen.t -> string QCheck.Gen.t       val small_list : 'QCheck.Gen.t -> 'a list 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.sized -> 'QCheck.Gen.sized) -> 'QCheck.Gen.sized       val generate :         ?rand:Random.State.t -> n:int -> 'QCheck.Gen.t -> 'a list       val generate1 : ?rand:Random.State.t -> 'QCheck.Gen.t -> 'a     end   module Print :     sig       type 'a t = '-> string       val unit : unit QCheck.Print.t       val int : int QCheck.Print.t       val bool : bool QCheck.Print.t       val float : float QCheck.Print.t       val char : char QCheck.Print.t       val string : string QCheck.Print.t       val option : 'QCheck.Print.t -> 'a option QCheck.Print.t       val pair :         'QCheck.Print.t -> 'QCheck.Print.t -> ('a * 'b) QCheck.Print.t       val triple :         'QCheck.Print.t ->         'QCheck.Print.t ->         'QCheck.Print.t -> ('a * 'b * 'c) QCheck.Print.t       val quad :         'QCheck.Print.t ->         'QCheck.Print.t ->         'QCheck.Print.t ->         'QCheck.Print.t -> ('a * 'b * 'c * 'd) QCheck.Print.t       val list : 'QCheck.Print.t -> 'a list QCheck.Print.t       val array : 'QCheck.Print.t -> 'a array QCheck.Print.t       val comap : ('-> 'b) -> 'QCheck.Print.t -> 'QCheck.Print.t     end   module Iter :     sig       type 'a t = ('-> unit) -> unit       val empty : 'QCheck.Iter.t       val return : '-> 'QCheck.Iter.t       val ( <*> ) :         ('-> 'b) QCheck.Iter.t -> 'QCheck.Iter.t -> 'QCheck.Iter.t       val ( >>= ) :         'QCheck.Iter.t -> ('-> 'QCheck.Iter.t) -> 'QCheck.Iter.t       val map : ('-> 'b) -> 'QCheck.Iter.t -> 'QCheck.Iter.t       val map2 :         ('-> '-> 'c) ->         'QCheck.Iter.t -> 'QCheck.Iter.t -> 'QCheck.Iter.t       val ( >|= ) : 'QCheck.Iter.t -> ('-> 'b) -> 'QCheck.Iter.t       val append : 'QCheck.Iter.t -> 'QCheck.Iter.t -> 'QCheck.Iter.t       val ( <+> ) : 'QCheck.Iter.t -> 'QCheck.Iter.t -> 'QCheck.Iter.t       val of_list : 'a list -> 'QCheck.Iter.t       val of_array : 'a array -> 'QCheck.Iter.t       val pair :         'QCheck.Iter.t -> 'QCheck.Iter.t -> ('a * 'b) QCheck.Iter.t       val triple :         'QCheck.Iter.t ->         'QCheck.Iter.t -> 'QCheck.Iter.t -> ('a * 'b * 'c) QCheck.Iter.t       val quad :         'QCheck.Iter.t ->         'QCheck.Iter.t ->         'QCheck.Iter.t ->         'QCheck.Iter.t -> ('a * 'b * 'c * 'd) QCheck.Iter.t       val find : ('-> bool) -> 'QCheck.Iter.t -> 'a option     end   module Shrink :     sig       type 'a t = '-> 'QCheck.Iter.t       val nil : 'QCheck.Shrink.t       val unit : unit QCheck.Shrink.t       val char : char QCheck.Shrink.t       val int : int QCheck.Shrink.t       val option : 'QCheck.Shrink.t -> 'a option QCheck.Shrink.t       val string : string QCheck.Shrink.t       val list : ?shrink:'QCheck.Shrink.t -> 'a list QCheck.Shrink.t       val array : ?shrink:'QCheck.Shrink.t -> 'a array QCheck.Shrink.t       val pair :         'QCheck.Shrink.t -> 'QCheck.Shrink.t -> ('a * 'b) QCheck.Shrink.t       val triple :         'QCheck.Shrink.t ->         'QCheck.Shrink.t ->         'QCheck.Shrink.t -> ('a * 'b * 'c) QCheck.Shrink.t       val quad :         'QCheck.Shrink.t ->         'QCheck.Shrink.t ->         'QCheck.Shrink.t ->         'QCheck.Shrink.t -> ('a * 'b * 'c * 'd) QCheck.Shrink.t     end   module Observable :     sig       type -'a t       val equal : 'QCheck.Observable.t -> '-> '-> bool       val hash : 'QCheck.Observable.t -> '-> int       val print : 'QCheck.Observable.t -> 'QCheck.Print.t       val unit : unit QCheck.Observable.t       val bool : bool QCheck.Observable.t       val int : int QCheck.Observable.t       val float : float QCheck.Observable.t       val string : string QCheck.Observable.t       val char : char QCheck.Observable.t       val make :         ?eq:('-> '-> bool) ->         ?hash:('-> int) -> 'QCheck.Print.t -> 'QCheck.Observable.t       val map :         ('-> 'b) -> 'QCheck.Observable.t -> 'QCheck.Observable.t       val option : 'QCheck.Observable.t -> 'a option QCheck.Observable.t       val list : 'QCheck.Observable.t -> 'a list QCheck.Observable.t       val array : 'QCheck.Observable.t -> 'a array QCheck.Observable.t       val pair :         'QCheck.Observable.t ->         'QCheck.Observable.t -> ('a * 'b) QCheck.Observable.t       val triple :         'QCheck.Observable.t ->         'QCheck.Observable.t ->         'QCheck.Observable.t -> ('a * 'b * 'c) QCheck.Observable.t       val quad :         'QCheck.Observable.t ->         'QCheck.Observable.t ->         'QCheck.Observable.t ->         'QCheck.Observable.t -> ('a * 'b * 'c * 'd) QCheck.Observable.t     end   type 'a stat = string * ('-> int)   type 'a arbitrary = {     gen : 'QCheck.Gen.t;     print : ('-> string) option;     small : ('-> int) option;     shrink : 'QCheck.Shrink.t option;     collect : ('-> string) option;     stats : 'QCheck.stat list;   }   val make :     ?print:'QCheck.Print.t ->     ?small:('-> int) ->     ?shrink:'QCheck.Shrink.t ->     ?collect:('-> string) ->     ?stats:'QCheck.stat list -> 'QCheck.Gen.t -> 'QCheck.arbitrary   val set_print :     'QCheck.Print.t -> 'QCheck.arbitrary -> 'QCheck.arbitrary   val set_small : ('-> int) -> 'QCheck.arbitrary -> 'QCheck.arbitrary   val set_shrink :     'QCheck.Shrink.t -> 'QCheck.arbitrary -> 'QCheck.arbitrary   val set_collect :     ('-> string) -> 'QCheck.arbitrary -> 'QCheck.arbitrary   val set_stats :     'QCheck.stat list -> 'QCheck.arbitrary -> 'QCheck.arbitrary   val add_stat : 'QCheck.stat -> 'QCheck.arbitrary -> 'QCheck.arbitrary   val gen : 'QCheck.arbitrary -> 'QCheck.Gen.t   module TestResult :     sig       type 'a counter_ex = { instance : 'a; shrink_steps : int; }       type 'a failed_state = 'QCheck.TestResult.counter_ex list       type 'a state =           Success         | Failed of 'QCheck.TestResult.failed_state         | Error of 'QCheck.TestResult.counter_ex * exn * string       type 'a t = {         mutable state : 'QCheck.TestResult.state;         mutable count : int;         mutable count_gen : int;         collect_tbl : (string, int) Hashtbl.t lazy_t;         stats_tbl : ('QCheck.stat * (int, int) Hashtbl.t) list;       }       val collect : 'QCheck.TestResult.t -> (string, int) Hashtbl.t option       val stats :         'QCheck.TestResult.t ->         ('QCheck.stat * (int, int) Hashtbl.t) list     end   module Test :     sig       type 'a cell       val make_cell :         ?count:int ->         ?long_factor:int ->         ?max_gen:int ->         ?max_fail:int ->         ?small:('-> int) ->         ?name:string ->         'QCheck.arbitrary -> ('-> bool) -> 'QCheck.Test.cell       val get_arbitrary : 'QCheck.Test.cell -> 'QCheck.arbitrary       val get_law : 'QCheck.Test.cell -> '-> bool       val get_name : 'QCheck.Test.cell -> string       val set_name : 'QCheck.Test.cell -> string -> unit       val get_count : 'QCheck.Test.cell -> int       val get_long_factor : 'QCheck.Test.cell -> int       type t = Test : 'QCheck.Test.cell -> QCheck.Test.t       val make :         ?count:int ->         ?long_factor:int ->         ?max_gen:int ->         ?max_fail:int ->         ?small:('-> int) ->         ?name:string -> 'QCheck.arbitrary -> ('-> bool) -> QCheck.Test.t       exception Test_fail of string * string list       exception Test_error of string * string * exn * string       val print_instance : 'QCheck.arbitrary -> '-> string       val print_c_ex :         'QCheck.arbitrary -> 'QCheck.TestResult.counter_ex -> string       val print_fail :         'QCheck.arbitrary ->         string -> 'QCheck.TestResult.counter_ex list -> string       val print_error :         ?st:string ->         'QCheck.arbitrary ->         string -> 'QCheck.TestResult.counter_ex * exn -> string       val print_test_fail : string -> string list -> string       val print_test_error : string -> string -> exn -> string -> string       val print_collect : (string, int) Hashtbl.t -> string       val print_stat : 'QCheck.stat * (int, int) Hashtbl.t -> string       val check_result :         'QCheck.Test.cell -> 'QCheck.TestResult.t -> unit       type res = Success | Failure | FalseAssumption | Error of exn * string       type 'a step =           string -> 'QCheck.Test.cell -> '-> QCheck.Test.res -> unit       type 'a callback =           string -> 'QCheck.Test.cell -> 'QCheck.TestResult.t -> unit       val check_cell :         ?long:bool ->         ?call:'QCheck.Test.callback ->         ?step:'QCheck.Test.step ->         ?rand:Random.State.t -> 'QCheck.Test.cell -> 'QCheck.TestResult.t       val check_cell_exn :         ?long:bool ->         ?call:'QCheck.Test.callback ->         ?step:'QCheck.Test.step ->         ?rand:Random.State.t -> 'QCheck.Test.cell -> unit       val check_exn :         ?long:bool -> ?rand:Random.State.t -> QCheck.Test.t -> unit     end   exception No_example_found of string   val find_example :     ?name:string ->     ?count:int -> f:('-> bool) -> 'QCheck.Gen.t -> 'QCheck.Gen.t   val find_example_gen :     ?rand:Random.State.t ->     ?name:string -> ?count:int -> f:('-> bool) -> 'QCheck.Gen.t -> 'a   val choose : 'QCheck.arbitrary list -> 'QCheck.arbitrary   val unit : unit QCheck.arbitrary   val bool : bool QCheck.arbitrary   val float : float QCheck.arbitrary   val pos_float : float QCheck.arbitrary   val neg_float : float QCheck.arbitrary   val int : int QCheck.arbitrary   val int_bound : int -> int QCheck.arbitrary   val int_range : int -> int -> int QCheck.arbitrary   val small_nat : int QCheck.arbitrary   val small_int : int QCheck.arbitrary   val small_signed_int : int QCheck.arbitrary   val ( -- ) : int -> int -> int QCheck.arbitrary   val int32 : int32 QCheck.arbitrary   val int64 : int64 QCheck.arbitrary   val pos_int : int QCheck.arbitrary   val small_int_corners : unit -> int QCheck.arbitrary   val neg_int : int QCheck.arbitrary   val char : char QCheck.arbitrary   val printable_char : char QCheck.arbitrary   val numeral_char : char QCheck.arbitrary   val string_gen_of_size :     int QCheck.Gen.t -> char QCheck.Gen.t -> string QCheck.arbitrary   val string_gen : char QCheck.Gen.t -> string QCheck.arbitrary   val string : string QCheck.arbitrary   val small_string : string QCheck.arbitrary   val small_list : 'QCheck.arbitrary -> 'a list QCheck.arbitrary   val string_of_size : int QCheck.Gen.t -> string QCheck.arbitrary   val printable_string : string QCheck.arbitrary   val printable_string_of_size : int QCheck.Gen.t -> string QCheck.arbitrary   val small_printable_string : string QCheck.arbitrary   val numeral_string : string QCheck.arbitrary   val numeral_string_of_size : int QCheck.Gen.t -> string QCheck.arbitrary   val list : 'QCheck.arbitrary -> 'a list QCheck.arbitrary   val list_of_size :     int QCheck.Gen.t -> 'QCheck.arbitrary -> 'a list QCheck.arbitrary   val array : 'QCheck.arbitrary -> 'a array QCheck.arbitrary   val array_of_size :     int QCheck.Gen.t -> 'QCheck.arbitrary -> 'a array QCheck.arbitrary   val pair :     'QCheck.arbitrary -> 'QCheck.arbitrary -> ('a * 'b) QCheck.arbitrary   val triple :     'QCheck.arbitrary ->     'QCheck.arbitrary ->     'QCheck.arbitrary -> ('a * 'b * 'c) QCheck.arbitrary   val quad :     'QCheck.arbitrary ->     'QCheck.arbitrary ->     'QCheck.arbitrary ->     'QCheck.arbitrary -> ('a * 'b * 'c * 'd) QCheck.arbitrary   val option : 'QCheck.arbitrary -> 'a option QCheck.arbitrary   val fun1_unsafe :     'QCheck.arbitrary -> 'QCheck.arbitrary -> ('-> 'b) QCheck.arbitrary   val fun2_unsafe :     'QCheck.arbitrary ->     'QCheck.arbitrary ->     'QCheck.arbitrary -> ('-> '-> 'c) QCheck.arbitrary   type _ fun_repr   type _ fun_ = Fun : 'QCheck.fun_repr * '-> 'QCheck.fun_   module Fn :     sig       type 'a t = 'QCheck.fun_       val print : 'QCheck.Fn.t QCheck.Print.t       val shrink : 'QCheck.Fn.t QCheck.Shrink.t       val apply : 'QCheck.Fn.t -> 'f     end   val fun1 :     'QCheck.Observable.t ->     'QCheck.arbitrary -> ('-> 'b) QCheck.fun_ QCheck.arbitrary   module Tuple :     sig       type 'a t =           Nil : unit QCheck.Tuple.t         | Cons : 'a * 'QCheck.Tuple.t -> ('a * 'b) QCheck.Tuple.t       val nil : unit QCheck.Tuple.t       val cons : '-> 'QCheck.Tuple.t -> ('a * 'b) QCheck.Tuple.t       type 'a obs       val o_nil : unit QCheck.Tuple.obs       val o_cons :         'QCheck.Observable.t ->         'QCheck.Tuple.obs -> ('a * 'b) QCheck.Tuple.obs       module Infix :         sig           val ( @:: ) : '-> 'QCheck.Tuple.t -> ('a * 'b) QCheck.Tuple.t           val ( @-> ) :             'QCheck.Observable.t ->             'QCheck.Tuple.obs -> ('a * 'b) QCheck.Tuple.obs         end       val ( @:: ) : '-> 'b t -> ('a * 'b) t       val ( @-> ) : 'Observable.t -> 'b obs -> ('a * 'b) obs       val observable :         'QCheck.Tuple.obs -> 'QCheck.Tuple.t QCheck.Observable.t     end   val fun_nary :     'QCheck.Tuple.obs ->     'QCheck.arbitrary ->     ('QCheck.Tuple.t -> 'b) QCheck.fun_ QCheck.arbitrary   val fun2 :     'QCheck.Observable.t ->     'QCheck.Observable.t ->     'QCheck.arbitrary -> ('-> '-> 'c) QCheck.fun_ QCheck.arbitrary   val fun3 :     'QCheck.Observable.t ->     'QCheck.Observable.t ->     'QCheck.Observable.t ->     'QCheck.arbitrary ->     ('-> '-> '-> 'd) QCheck.fun_ QCheck.arbitrary   val fun4 :     'QCheck.Observable.t ->     'QCheck.Observable.t ->     'QCheck.Observable.t ->     'QCheck.Observable.t ->     'QCheck.arbitrary ->     ('-> '-> '-> '-> 'e) QCheck.fun_ QCheck.arbitrary   val oneofl :     ?print:'QCheck.Print.t ->     ?collect:('-> string) -> 'a list -> 'QCheck.arbitrary   val oneofa :     ?print:'QCheck.Print.t ->     ?collect:('-> string) -> 'a array -> 'QCheck.arbitrary   val oneof : 'QCheck.arbitrary list -> 'QCheck.arbitrary   val always : ?print:'QCheck.Print.t -> '-> 'QCheck.arbitrary   val frequency :     ?print:'QCheck.Print.t ->     ?small:('-> int) ->     ?shrink:'QCheck.Shrink.t ->     ?collect:('-> string) ->     (int * 'QCheck.arbitrary) list -> 'QCheck.arbitrary   val frequencyl :     ?print:'QCheck.Print.t ->     ?small:('-> int) -> (int * 'a) list -> 'QCheck.arbitrary   val frequencya :     ?print:'QCheck.Print.t ->     ?small:('-> int) -> (int * 'a) array -> 'QCheck.arbitrary   val map :     ?rev:('-> 'a) ->     ('-> 'b) -> 'QCheck.arbitrary -> 'QCheck.arbitrary   val map_same_type :     ('-> 'a) -> 'QCheck.arbitrary -> 'QCheck.arbitrary   val map_keep_input :     ?print:'QCheck.Print.t ->     ?small:('-> int) ->     ('-> 'b) -> 'QCheck.arbitrary -> ('a * 'b) QCheck.arbitrary end