sig
  val unification :
    bool ->
    Flx_types.symbol_table_t ->
    (Flx_types.btypecode_t * Flx_types.btypecode_t) list ->
    Flx_mtypes1.IntSet.t -> (int * Flx_types.btypecode_t) list
  val maybe_unification :
    Flx_types.symbol_table_t ->
    (Flx_types.btypecode_t * Flx_types.btypecode_t) list ->
    (int * Flx_types.btypecode_t) list option
  val maybe_matches :
    Flx_types.symbol_table_t ->
    (Flx_types.btypecode_t * Flx_types.btypecode_t) list ->
    (int * Flx_types.btypecode_t) list option
  val maybe_specialisation :
    Flx_types.symbol_table_t ->
    (Flx_types.btypecode_t * Flx_types.btypecode_t) list ->
    (int * Flx_types.btypecode_t) list option
  val unifies :
    Flx_types.symbol_table_t ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t -> bool
  val compare_sigs :
    Flx_types.symbol_table_t ->
    Flx_types.btypecode_t ->
    Flx_types.btypecode_t -> Flx_types.partial_order_result_t
  val do_unify :
    Flx_mtypes2.sym_state_t ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t -> bool
  val type_eq :
    Flx_types.symbol_table_t ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t -> bool
  val type_match :
    Flx_types.symbol_table_t ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t -> bool
  val lstrip :
    Flx_types.symbol_table_t ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t
  val unfold :
    Flx_types.symbol_table_t ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t
  val fold :
    Flx_types.symbol_table_t ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t
  val minimise :
    Flx_types.symbol_table_t ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t
  val list_subst :
    (int * Flx_types.btypecode_t) list ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t
  val mk_varmap :
    (string * int) list ->
    Flx_types.btypecode_t list -> (int, Flx_types.btypecode_t) Hashtbl.t
  val tsubst :
    (string * int) list ->
    Flx_types.btypecode_t list ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t
  val varmap_subst :
    (int, Flx_types.btypecode_t) Hashtbl.t ->
    Flx_types.btypecode_t -> Flx_types.btypecode_t
  val var_occurs : Flx_types.btypecode_t -> bool
  val var_i_occurs : int -> Flx_types.btypecode_t -> bool
  val var_list_occurs : int list -> Flx_types.btypecode_t -> bool
  val normalise_type :
    Flx_types.btypecode_t -> int list * Flx_types.btypecode_t
  val check_recursion : Flx_types.btypecode_t -> unit
  val dual : Flx_types.btypecode_t -> Flx_types.btypecode_t
end