diff options
-rw-r--r-- | lib/elixir/lib/module/types/infer.ex | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/elixir/lib/module/types/infer.ex b/lib/elixir/lib/module/types/infer.ex index 0a3bf7995..a84c297bb 100644 --- a/lib/elixir/lib/module/types/infer.ex +++ b/lib/elixir/lib/module/types/infer.ex @@ -32,11 +32,23 @@ defmodule Module.Types.Infer do end defp do_unify(type, {:var, var}, stack, context) do - unify_var(var, type, stack, context, _var_source = false) + case Map.fetch!(context.types, var) do + {:var, var_type} -> + do_unify(type, {:var, var_type}, stack, context) + + _other -> + unify_var(var, type, stack, context, _var_source = false) + end end defp do_unify({:var, var}, type, stack, context) do - unify_var(var, type, stack, context, _var_source = true) + case Map.fetch!(context.types, var) do + {:var, var_type} -> + do_unify({:var, var_type}, type, stack, context) + + _other -> + unify_var(var, type, stack, context, _var_source = true) + end end defp do_unify({:tuple, sources}, {:tuple, targets}, stack, context) |