summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--typing/ctype.ml15
1 files changed, 7 insertions, 8 deletions
diff --git a/typing/ctype.ml b/typing/ctype.ml
index 73f25f8fd..d2e3c67ff 100644
--- a/typing/ctype.ml
+++ b/typing/ctype.ml
@@ -1350,14 +1350,13 @@ let unalias ty =
let unroll_abbrev id tl ty =
let ty = repr ty in
- match ty.desc with
- Tvar ->
- ty
- | _ ->
- let ty' = {desc = ty.desc; level = ty.level} in
- ty.desc <- Tlink {desc = Tconstr (Path.Pident id, tl, ref Mnil);
- level = ty.level};
- ty'
+ if (ty.desc = Tvar) || (List.exists (deep_occur ty) tl) then
+ ty
+ else
+ let ty' = {desc = ty.desc; level = ty.level} in
+ ty.desc <- Tlink {desc = Tconstr (Path.Pident id, tl, ref Mnil);
+ level = ty.level};
+ ty'
(* Return the arity (as for curried functions) of the given type. *)
let rec arity ty =