Перво-наперво, я бы не стал декоратором, я бы обернул его как curry(foo)
. Меня смущает взгляд на API, где оформленная сигнатура функции отличается от своего первоначального определения.
Что касается типов, то я был бы очень впечатлен, если общий случай возможен с Python подсказками типов , Я не уверен, как бы я это сделал в Scala. Вы можете выполнить ограниченное количество дел, используя overload
для функций двух параметров, например
T1 = TypeVar("T1")
T2 = TypeVar("T2")
U = TypeVar("U")
@overload
def curry(
func: Callable[[T1, T2], U],
max_argc: Optional[int]
) -> Callable[[T1], Callable[[T2], U]]:
...
, добавляя версии для одного, трех, четырех параметров и т.д. c. Функции с большим количеством параметров в любом случае являются запахами кода, за исключением varargs, которые, я не уверен, имеет ли смысл даже карри.