sig
  val occurs : Ast.id -> Ast.typ -> bool
  val subst : Ast.typ -> Ast.id -> Ast.typ -> Ast.typ
  val apply : Ast.substitution -> Ast.typ -> Ast.typ
  val unify : Ast.constr list -> Ast.substitution
end