Skip to content

Union[Generic[T], T]] does not work as expected as a parameter in the signature of a generic function #6417

Description

@haikuginger
  • Are you reporting a bug, or opening a feature request?

Bug

  • Please insert below the code you are checking with mypy,
    or a mock-up repro if the source is private. We would appreciate
    if you try to simplify your case to a minimal repro.
fromtypingimportGeneric, TypeVar, UnionF=TypeVar("F")
classZ(Generic[F]):
y: Fdef__init__(self, y: F):
self.y=ydefq2(x: Union[Z[F], F]) ->F:
ifisinstance(x, Z):
returnx.yelse:
returnxdefq3(x: Z[F]) ->F:
returnx.yp=Z('hi')
reveal_type(p) # Z[builtins.str*]reveal_type(q2) # def [F] (x: Union[Z[F`-1], F`-1]) -> F`-1q2(p) # error: Argument 1 to "q2" has incompatible type "Z[str]"; expected "Z[<nothing>]"q3(p) # No error
  • What is the actual behavior/output?

When creating a generic function that has a signature where one parameter is a union on a generic of a typevar and that typevar, calling with the generic causes an error.

  • What is the behavior/output you expect?

Z[F] satisfies Union[Z[F], F]

  • What are the versions of mypy and Python you are using?
    Do you see the same issue after installing mypy from Git master?

Python 3.6.6, using mypy 0.660; same issue happens with master.

  • What are the mypy flags you are using? (For example --strict-optional)

No flags

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions