functor (T : REPR->
  sig
    type t = T.t
    val print : t printer
    val print' : prec -> t printer
    val print_in_app : t printer
    val print_in_binder : t printer
    val to_string : t -> string
    val to_sexp : t -> Sexp_lib.t
  end