Skip to content

Incorrect result type for returns.curry.partial with keyword arguments for positional parameters #2191

Description

@Nifacy

Bug report

What's wrong

When using returns.curry.partial, if you partially apply a positional parameter using a keyword argument, the resulting type is incorrect. Result type of callable allows passing the remaining arguments as positional, but this leads to a runtime error.

Example

def foo(x: int, y: int) -> None:
    ...

bar = returns.curry.partial(foo, x=1)
reveal_type(bar)
# => Mypy: "def (y: builtins.int)"
# => Expected: "def (*, y: builtins.int)"

bar(2)
# No errors from mypy, but got runtime error
# TypeError: foo() got multiple values for argument 'x'

How is that should be

In this scenario, the remaining parameters should be strictly keyword-only. The resulting type should reflect this restriction, and passing a positional argument should be flagged as an error at type checking time.

System information

  • python version: 3.13.4
  • returns version: 0.25.0
  • mypy version: 1.15.0

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions