ordered-set icon indicating copy to clipboard operation
ordered-set copied to clipboard

Make T covariant

Open lczyk opened this issue 2 years ago • 0 comments

The containers from typing are covariant in their args. It'd make sense to make OrderedSet covariant too.

from ordered_set import OrderedSet

class A:
    pass

class B(A):
    pass

def my_fun(things: OrderedSet[A]) -> None:
    pass

things1 = OrderedSet([A()])
things2 = OrderedSet([B()])

my_fun(things1) # ok
my_fun(things2) # Argument 1 to "my_fun" has incompatible type "OrderedSet[B]"; expected "OrderedSet[A]"  [arg-type]

# Workaround:

from typing import cast

my_fun(cast(OrderedSet[A], things2))

lczyk avatar Jul 12 '23 11:07 lczyk