Test only for covariance and contravariance
This commit is contained in:
parent
96d9509b44
commit
2883b41beb
@ -1157,17 +1157,13 @@ infer_type_vars_variance(TypeParams, Cons) ->
|
|||||||
Vs = lists:flatten([infer_type_vars_variance(Arg) || Arg <- FlatArgs]),
|
Vs = lists:flatten([infer_type_vars_variance(Arg) || Arg <- FlatArgs]),
|
||||||
lists:map(fun({tvar, _, TVar}) ->
|
lists:map(fun({tvar, _, TVar}) ->
|
||||||
S = sets:from_list([Variance || {TV, Variance} <- Vs, TV == TVar]),
|
S = sets:from_list([Variance || {TV, Variance} <- Vs, TV == TVar]),
|
||||||
IsInvariant = sets:is_element(invariant, S),
|
|
||||||
IsCovariant = sets:is_element(covariant, S),
|
IsCovariant = sets:is_element(covariant, S),
|
||||||
IsContravariant = sets:is_element(contravariant, S),
|
IsContravariant = sets:is_element(contravariant, S),
|
||||||
IsBivariant = sets:is_element(bivariant, S),
|
case {IsCovariant, IsContravariant} of
|
||||||
case {IsInvariant, IsCovariant, IsContravariant, IsBivariant} of
|
{true, true} -> invariant;
|
||||||
{true, _, _, _} -> invariant;
|
{true, false} -> covariant;
|
||||||
{false, true, true, _} -> invariant;
|
{false, true} -> contravariant;
|
||||||
{false, _, _, true} -> bivariant;
|
{false, false} -> bivariant
|
||||||
{false, true, false, _} -> covariant;
|
|
||||||
{false, false, true, _} -> contravariant;
|
|
||||||
_ -> invariant
|
|
||||||
end
|
end
|
||||||
end, TypeParams).
|
end, TypeParams).
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user