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