From 94671873133a7ec65f3f9368978de1ed4a3f1bdd Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Sat, 20 Jun 2026 16:30:30 +0200 Subject: [PATCH] feat(checker): use variance in subtype check --- midas/checker/registry.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/midas/checker/registry.py b/midas/checker/registry.py index fa2d1bd..b8f7dfa 100644 --- a/midas/checker/registry.py +++ b/midas/checker/registry.py @@ -17,6 +17,7 @@ from midas.checker.types import ( Type, TypeVar, UnknownType, + Variance, substitute_typevars, ) @@ -134,6 +135,24 @@ class TypesRegistry: case (ConstraintType(type=base1), _): return self.is_subtype(base1, type2) + case ( + AppliedType(name=name1, args=args1), + AppliedType(name=name2, args=args2), + ) if ( + name1 == name2 + ): + generic: Type = self.get_type(name1) + assert isinstance(generic, GenericType) + for param, arg1, arg2 in zip(generic.params, args1, args2): + variance: Variance = param.variance + if variance in {Variance.INVARIANT, Variance.COVARIANT}: + if not self.is_subtype(arg1, arg2): + return False + if variance in {Variance.INVARIANT, Variance.CONTRAVARIANT}: + if not self.is_subtype(arg2, arg1): + return False + return True + return False # TODO: verify the logic in here