@@ -70,46 +70,6 @@ class Length[S: tuple | str]:
7070 pass
7171
7272
73- class Equals [L , R ]:
74- pass
75-
76-
77- class NotEquals [L , R ]:
78- pass
79-
80-
81- class GreaterThan [L , R ]:
82- pass
83-
84-
85- class LessThan [L , R ]:
86- pass
87-
88-
89- class GreaterThanOrEqual [L , R ]:
90- pass
91-
92-
93- class LessThanOrEqual [L , R ]:
94- pass
95-
96-
97- class Not [T ]:
98- pass
99-
100-
101- class And [L , R ]:
102- pass
103-
104-
105- class Or [L , R ]:
106- pass
107-
108-
109- class If [Cond , Then , Else ]:
110- pass
111-
112-
11373class Uppercase [S : str ]:
11474 pass
11575
@@ -164,7 +124,16 @@ class _IsGenericAlias(_GenericAlias, _root=True): # type: ignore[call-arg]
164124 def __bool__ (self ):
165125 evaluator = special_form_evaluator .get ()
166126 if evaluator :
167- return evaluator (self )
127+ result = evaluator (self )
128+ if result is True or result is False :
129+ return result
130+ elif (
131+ isinstance (result , typing ._GenericAlias )
132+ and getattr (result , "__origin__" , None ) is typing .Literal
133+ ):
134+ return result .__args__ [0 ]
135+ else :
136+ raise RuntimeError (f"Expected boolean, got { result } " )
168137 else :
169138 return False
170139
@@ -179,4 +148,54 @@ def IsSubSimilar(self, tps):
179148 return _IsGenericAlias (self , tps )
180149
181150
151+ @_SpecialForm
152+ def Equals (self , params ):
153+ return _IsGenericAlias (self , params )
154+
155+
156+ @_SpecialForm
157+ def NotEquals (self , params ):
158+ return _IsGenericAlias (self , params )
159+
160+
161+ @_SpecialForm
162+ def GreaterThan (self , params ):
163+ return _IsGenericAlias (self , params )
164+
165+
166+ @_SpecialForm
167+ def LessThan (self , params ):
168+ return _IsGenericAlias (self , params )
169+
170+
171+ @_SpecialForm
172+ def GreaterThanOrEqual (self , params ):
173+ return _IsGenericAlias (self , params )
174+
175+
176+ @_SpecialForm
177+ def LessThanOrEqual (self , params ):
178+ return _IsGenericAlias (self , params )
179+
180+
181+ @_SpecialForm
182+ def Not (self , params ):
183+ return _IsGenericAlias (self , params )
184+
185+
186+ @_SpecialForm
187+ def And (self , params ):
188+ return _IsGenericAlias (self , params )
189+
190+
191+ @_SpecialForm
192+ def Or (self , params ):
193+ return _IsGenericAlias (self , params )
194+
195+
196+ @_SpecialForm
197+ def If (self , params ):
198+ return _IsGenericAlias (self , params )
199+
200+
182201Is = IsSubSimilar
0 commit comments