sig
  type 'a t = 'a
  val to_string : ('a -> 'b) -> 'a -> 'b
  val compare : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c
end