sig
  type 'a t = 'a -> 'a QCheck.Iter.t
  val nil : 'a QCheck.Shrink.t
  val unit : unit QCheck.Shrink.t
  val char : char QCheck.Shrink.t
  val int : int QCheck.Shrink.t
  val option : 'a QCheck.Shrink.t -> 'a option QCheck.Shrink.t
  val string : string QCheck.Shrink.t
  val filter : ('a -> bool) -> 'a QCheck.Shrink.t -> 'a QCheck.Shrink.t
  val int_aggressive : int QCheck.Shrink.t
  val list : ?shrink:'a QCheck.Shrink.t -> 'a list QCheck.Shrink.t
  val array : ?shrink:'a QCheck.Shrink.t -> 'a array QCheck.Shrink.t
  val pair :
    'a QCheck.Shrink.t -> 'b QCheck.Shrink.t -> ('a * 'b) QCheck.Shrink.t
  val triple :
    'a QCheck.Shrink.t ->
    'b QCheck.Shrink.t ->
    'c QCheck.Shrink.t -> ('a * 'b * 'c) QCheck.Shrink.t
  val quad :
    'a QCheck.Shrink.t ->
    'b QCheck.Shrink.t ->
    'c QCheck.Shrink.t ->
    'd QCheck.Shrink.t -> ('a * 'b * 'c * 'd) QCheck.Shrink.t
end