Given
trait Foo[T <: Bar] {
def foo: T
}
why does the compiler NOT interpret signature like
def foo(f: Foo[_])
to mean that the unknown _ must be a type of Bar. Instead, it forces me to do this
def foo(f: Foo[_ <: Bar])
which complicates signatures. I'm sure the compiler must be right and I'm missing some subtlety but clearly a Foo[X] where X is NOT some kind of Bar so not possible by construction, so why?
Thank you.
In short - seems to be a deficiency of the compiler and an open question whether to address it. Fixing it may have unintended consequences but it's been raised often enough to still be considered seriously as a possible fix. Here are some of the most relevant and still open Bugs tickets.
P.S. It seems that Dotty does honor such bounds so they may well fix it!
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