sig
  val debug : bool
  val debug_print : string -> unit
  val show_binop : ('-> string) -> 'a * '-> string -> string
  val opstring_of_binop : Ast.binary_op -> string
  val opstring_of_unop : Ast.unary_op -> string
  val expr_to_string : Ast.expr -> Ast.id
  val pattern_to_string : Ast.pattern -> Ast.id
  val string_of_list : Ast.expr -> Ast.id
  val const_to_string : Ast.constant -> Ast.id
  val type_to_string : Ast.typ -> string
  val apattern_to_string : Ast.apattern -> Ast.id
  val aexpr_to_string : Ast.aexpr -> string
  val val_to_string : Ast.value -> string
  val constr_to_string : Ast.constr -> string
  val constraints_to_string : Ast.constr list -> string
  val subst_to_string : Ast.substitution -> string
  val print : ('-> string) -> '-> unit
  val print_list : ('-> string) -> 'a list -> unit
  val print_type : Ast.typ -> unit
  val print_val : Ast.value -> unit
  val print_constraint : Ast.constr -> unit
  val print_substitution : Ast.substitution -> unit
end