feat: function downcasting

FIXME: This downcast is unsound, function inputs, output should be checked at runtime
This commit is contained in:
Shunsuke Shibayama 2023-12-31 09:03:40 +09:00
parent 2ddff1512f
commit 767d51d48b
6 changed files with 75 additions and 10 deletions

View file

@ -5,6 +5,7 @@ from _erg_type import _isinstance
from _erg_type import UnionType
from collections import namedtuple
from typing import Callable
# (elem in y) == contains_operator(y, elem)
def contains_operator(y, elem) -> bool:
@ -62,5 +63,8 @@ def contains_operator(y, elem) -> bool:
elif _isinstance(elem, list):
from _erg_array import Array
return contains_operator(y, Array(elem))
elif _isinstance(elem, Callable):
# TODO:
return _isinstance(y, Callable)
else:
return elem in y

View file

@ -1,3 +1,5 @@
from typing import Callable
try:
from typing import Union
except ImportError:
@ -43,7 +45,8 @@ def _isinstance(obj, classinfo) -> bool:
return any(_isinstance(obj, t) for t in classinfo.__args__)
else:
return isinstance(obj, classinfo.__origin__)
elif is_type(classinfo):
return isinstance(obj, classinfo)
else:
return False
try:
return isinstance(obj, classinfo)
except:
return False