sig
  type 'a t = ('a -> unit) -> unit
  val empty : 'a QCheck.Iter.t
  val return : 'a -> 'a QCheck.Iter.t
  val ( <*> ) :
    ('a -> 'b) QCheck.Iter.t -> 'a QCheck.Iter.t -> 'b QCheck.Iter.t
  val ( >>= ) :
    'a QCheck.Iter.t -> ('a -> 'b QCheck.Iter.t) -> 'b QCheck.Iter.t
  val map : ('a -> 'b) -> 'a QCheck.Iter.t -> 'b QCheck.Iter.t
  val map2 :
    ('a -> 'b -> 'c) ->
    'a QCheck.Iter.t -> 'b QCheck.Iter.t -> 'c QCheck.Iter.t
  val ( >|= ) : 'a QCheck.Iter.t -> ('a -> 'b) -> 'b QCheck.Iter.t
  val append : 'a QCheck.Iter.t -> 'a QCheck.Iter.t -> 'a QCheck.Iter.t
  val ( <+> ) : 'a QCheck.Iter.t -> 'a QCheck.Iter.t -> 'a QCheck.Iter.t
  val of_list : 'a list -> 'a QCheck.Iter.t
  val of_array : 'a array -> 'a QCheck.Iter.t
  val pair : 'a QCheck.Iter.t -> 'b QCheck.Iter.t -> ('a * 'b) QCheck.Iter.t
  val triple :
    'a QCheck.Iter.t ->
    'b QCheck.Iter.t -> 'c QCheck.Iter.t -> ('a * 'b * 'c) QCheck.Iter.t
  val quad :
    'a QCheck.Iter.t ->
    'b QCheck.Iter.t ->
    'c QCheck.Iter.t -> 'd QCheck.Iter.t -> ('a * 'b * 'c * 'd) QCheck.Iter.t
  val find : ('a -> bool) -> 'a QCheck.Iter.t -> 'a option
  val filter : ('a -> bool) -> 'a QCheck.Iter.t -> 'a QCheck.Iter.t
  val append_l : 'a QCheck.Iter.t list -> 'a QCheck.Iter.t
  val flatten : 'a QCheck.Iter.t QCheck.Iter.t -> 'a QCheck.Iter.t
  val ( let+ ) : 'a t -> ('a -> 'b) -> 'b t
  val ( and+ ) : 'a t -> 'b t -> ('a * 'b) t
  val ( let* ) : 'a t -> ('a -> 'b t) -> 'b t
  val ( and* ) : 'a t -> 'b t -> ('a * 'b) t
end