sig
  exception Overflow
  module Make :
    functor (T : Print.PRINTABLE_TYPE->
      sig
        type t
        val print : Format.formatter -> t -> unit
        val create : T.t -> t
        val value : t -> T.t
        val id : t -> int
        val compare : t -> t -> int
        val equal : t -> t -> bool
        val hash : t -> int
        val lift_una_op : (T.t -> T.t) -> t -> t
        val lift_bin_op : (T.t -> T.t -> T.t) -> t -> t -> t
        val lift_una_fun : (T.t -> 'a) -> t -> 'a
        val lift_bin_fun : (T.t -> T.t -> 'a) -> t -> t -> 'a
      end
end