Default to invariant when the variance of the type vars is unknown

This commit is contained in:
Gaith Hallak 2022-05-25 18:46:53 +04:00
parent 8d419bc54f
commit 9e3f42db2c

View File

@ -815,6 +815,7 @@ infer(Contracts, Options) ->
%% Set the variance for builtin types %% Set the variance for builtin types
ets_insert(type_vars_variance, {"list", [covariant]}), ets_insert(type_vars_variance, {"list", [covariant]}),
ets_insert(type_vars_variance, {"option", [covariant]}), ets_insert(type_vars_variance, {"option", [covariant]}),
ets_insert(type_vars_variance, {"map", [covariant, covariant]}),
ets_insert(type_vars_variance, {"oracle", [contravariant, covariant]}), ets_insert(type_vars_variance, {"oracle", [contravariant, covariant]}),
ets_insert(type_vars_variance, {"oracle_query", [covariant, covariant]}), ets_insert(type_vars_variance, {"oracle_query", [covariant, covariant]}),
@ -2777,7 +2778,7 @@ unify1(Env, {app_t, _, {Tag, _, F}, Args1}, {app_t, _, {Tag, _, F}, Args2}, Vari
invariant -> invariant; invariant -> invariant;
_ -> Vs _ -> Vs
end; end;
_ -> Variance _ -> invariant
end, end,
unify1(Env, Args1, Args2, Variances, When); unify1(Env, Args1, Args2, Variances, When);
unify1(Env, {tuple_t, _, As}, {tuple_t, _, Bs}, Variance, When) unify1(Env, {tuple_t, _, As}, {tuple_t, _, Bs}, Variance, When)