sig
  type 'a gen = unit -> 'a
  val fg : float gen
  val cg : char gen
  val nng : int gen
  val uig : int gen
  val pg : 'a gen -> 'b gen -> ('a * 'b) gen
  val tg : 'a gen -> 'b gen -> 'c gen -> ('a * 'b * 'c) gen
  val lg : 'a gen -> ?size_gen:int gen -> 'a list gen
  val sg : ?char_gen:char gen -> ?size_gen:int gen -> string gen
  val always : '-> 'a gen
  val laws : int -> 'a gen -> ('-> bool) -> 'a option
  val laws_exn : string -> int -> 'a gen -> ('-> bool) -> unit
  val repeat : int -> ('-> unit) -> 'a gen -> unit
end