I would like to call 'contains' on my Iterables :-)
The reason Iterable does not have a contains method is because the way it is defined can have direct consequences on variance. Basically, there are two type signatures that make sense for it:
def contains(v: Any): Boolean
def contains(v: A): Boolean
The second definition has increased type safety. However, A, which is the type parameter of collection, appears in a contra-variant position, which forces the collection to be invariant. It could be defined like this:
def contains[B >: A](v: B): Boolean
but that wouldn't offer any improvement over the first signature, using Any.
As a consequence of this, you'll see that immutable.Seq is co-variant and uses the first signature, while immutable.Set is invariant and uses the second signature.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With