functor
  (T : sig
         type t
         type elt
         val empty : Unification.t
         val is_empty : Unification.t -> bool
         val equal : Unification.t -> Unification.t -> bool
         val add : Unification.elt -> Unification.t -> Unification.t
         val choose : Unification.t -> Unification.elt
         val remove : Unification.elt -> Unification.t -> Unification.t
         val find_map :
           (Unification.elt -> 'a option) -> Unification.t -> 'a option
       end->
  sig
    val mk_unifier :
      bool ->
      bool ->
      (T.elt -> T.elt -> ('-> 'b option) -> '-> 'b option) ->
      T.t -> T.t -> ('-> 'b option) -> '-> 'b option
  end