I'm trying to extend the List class to give it some more streamlined way to compare the sizes, however I run into the error in the title...
Here's my code:
implicit class RichList[A, B](input: List[A]) {
def >(that: List[B]): Boolean = input.size > that.size
def <(that: List[B]): Boolean = input.size < that.size
}
The idea was that since all it does it compare the sizes of the lists, their types could be different and it wouldn't matter, however when I try to do this:
val test = List(1,2,3,4) < List(1,2,3,4,5)
I get the beforementioned error. If I remove B and set that to be of type List[A] it works fine, but then I wouldn't be able to use lists containing 2 different types...
Why is it that both A and B can't be the same type? Or am I missing something?
Edit: Ok I've found a solution to the error, which is rather simple:
implicit class RichList[A](input: List[A]) {
def >[B](that: List[B]): Boolean = input.size > that.size
def <[B](that: List[B]): Boolean = input.size < that.size
}
However my question still stands; why can't I do it the other way?
In your helper class you define the type
Bin the class initialization. But that type is unknown until the method>or<usage.My solution would be this.
Edit
Since you asked, why its not possible in other way, consider following example.
We hope this will implicitly expand to (This wont happen)
But, type
Bis not resolved toString. Therefore, compiler neglects this implicit conversion, and gives a compilation error.