sig
  type 'a sequence = ('-> unit) -> unit
  module Make :
    functor (T : TermInner.REPR->
      sig
        exception Fail of (T.t * T.t) list * string
        val unify_exn : T.t -> T.t -> unit
        type meta_vars_set = T.t MetaVar.t ID.Map.t
        val free_meta_vars :
          ?init:TypeUnify.Make.meta_vars_set ->
          T.t -> TypeUnify.Make.meta_vars_set
      end
end