sig
  type -'a t
  val make :
    ?eq:('a -> 'a -> bool) ->
    ?hash:('a -> int) -> 'a QCheck2.Print.t -> 'a QCheck2.Observable.t
  val equal : 'a QCheck2.Observable.t -> 'a -> 'a -> bool
  val hash : 'a QCheck2.Observable.t -> 'a -> int
  val print : 'a QCheck2.Observable.t -> 'a QCheck2.Print.t
  val unit : unit QCheck2.Observable.t
  val bool : bool QCheck2.Observable.t
  val int : int QCheck2.Observable.t
  val float : float QCheck2.Observable.t
  val bytes : bytes QCheck2.Observable.t
  val string : string QCheck2.Observable.t
  val char : char QCheck2.Observable.t
  val contramap :
    ('b -> 'a) -> 'a QCheck2.Observable.t -> 'b QCheck2.Observable.t
  val map : ('b -> 'a) -> 'a QCheck2.Observable.t -> 'b QCheck2.Observable.t
  val option : 'a QCheck2.Observable.t -> 'a option QCheck2.Observable.t
  val list : 'a QCheck2.Observable.t -> 'a list QCheck2.Observable.t
  val array : 'a QCheck2.Observable.t -> 'a array QCheck2.Observable.t
  val pair :
    'a QCheck2.Observable.t ->
    'b QCheck2.Observable.t -> ('a * 'b) QCheck2.Observable.t
  val triple :
    'a QCheck2.Observable.t ->
    'b QCheck2.Observable.t ->
    'c QCheck2.Observable.t -> ('a * 'b * 'c) QCheck2.Observable.t
  val quad :
    'a QCheck2.Observable.t ->
    'b QCheck2.Observable.t ->
    'c QCheck2.Observable.t ->
    'd QCheck2.Observable.t -> ('a * 'b * 'c * 'd) QCheck2.Observable.t
end