sig
  type 'a t =
      Nil : unit QCheck.Tuple.t
    | Cons : 'a * 'b QCheck.Tuple.t -> ('a * 'b) QCheck.Tuple.t
  val nil : unit QCheck.Tuple.t
  val cons : 'a -> 'b QCheck.Tuple.t -> ('a * 'b) QCheck.Tuple.t
  type 'a obs
  val o_nil : unit QCheck.Tuple.obs
  val o_cons :
    'a QCheck.Observable.t ->
    'b QCheck.Tuple.obs -> ('a * 'b) QCheck.Tuple.obs
  module Infix :
    sig
      val ( @:: ) : 'a -> 'b QCheck.Tuple.t -> ('a * 'b) QCheck.Tuple.t
      val ( @-> ) :
        'a QCheck.Observable.t ->
        'b QCheck.Tuple.obs -> ('a * 'b) QCheck.Tuple.obs
    end
  val ( @:: ) : 'a -> 'b t -> ('a * 'b) t
  val ( @-> ) : 'a Observable.t -> 'b obs -> ('a * 'b) obs
  val observable :
    'a QCheck.Tuple.obs -> 'a QCheck.Tuple.t QCheck.Observable.t
end