enhanced_curry()
Enhanced curry function with explicit arity support and _argcount tracking.
Implementation
Args: func: The function to curry arity: Explicit arity (if None, inferred from function) Returns: A curried function that collects arguments until arity is reached
Example
def add_three(a, b, c):
return a + b + c
curried_add = enhanced_curry(add_three)
result = curried_add(1)(2)(3)
result
Expected output: 6
Source Code
def enhanced_curry(func: Callable, arity: Optional[int] = None) -> Callable:
_validate_callable(func)
if arity is None:
arity = func.__code__.co_argcount
def curried(*args):
if len(args) >= arity:
return func(*args[:arity])
def next_curry(*more_args):
return curried(*(args + more_args))
# Track remaining arguments needed
next_curry._argcount = arity - len(args) # type: ignore
return _copy_function_metadata(next_curry, func)
curried._argcount = arity # type: ignore
return _copy_function_metadata(curried, func)