Hi everyone,
Working on porting Breeze to Scala 3. It's mostly been mechanical, but I think there's been a major change to how implicits are prioritized and I want to check my understanding.
E.g. if I have
val x : DenseVector[Double] = ???
x := 0.0
which needs an implicit OpSet.InPlaceImpl2[DenseVector[Double], Double]. Previously this would find the right implicit value in DenseVector's companion object. Now however, it's ambiguous with the one in Vector's companion:
ambiguous implicit arguments: both value dv_s_UpdateOp_Double_OpSet in trait DenseVectorOps and value v_s_UpdateOp_Double_OpSet in trait VectorOps match type breeze.linalg.operators.OpSet.InPlaceImpl2[TT, Double] of parameter op of method := in trait NumericOps
This is highly annoying because it means I'll need to reorganize all of the implicits, unless I'm missing something. I can't find the spec for Scala 3, so I dunno what to expect.
There's at least one other oddity, but this is by far the biggest.
Any experts here? Happy to hash this out over email or talk over video call at some point if that's easier.
Thanks!
-- David