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