sig
  type 'a t
  val gen :
    (?size:int -> Random.State.t -> 'a) ->
    ?size:int -> Random.State.t -> 'a t
  val to_string : ('a -> string) -> 'a t -> string
  val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int
end