functor
  (X : sig
         type 'a t
         val ( >|= ) : 'Qcheck_ops.t -> ('-> 'b) -> 'Qcheck_ops.t
         val monoid_product :
           'Qcheck_ops.t -> 'Qcheck_ops.t -> ('a * 'b) Qcheck_ops.t
         val ( >>= ) :
           'Qcheck_ops.t -> ('-> 'Qcheck_ops.t) -> 'Qcheck_ops.t
       end->
  sig
    type 'a t_let = 'X.t
    val ( let+ ) : 'a t_let -> ('-> 'b) -> 'b t_let
    val ( and+ ) : 'a t_let -> 'b t_let -> ('a * 'b) t_let
    val ( let* ) : 'a t_let -> ('-> 'b t_let) -> 'b t_let
    val ( and* ) : 'a t_let -> 'b t_let -> ('a * 'b) t_let
  end