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