Как я могу решить неявное расширение расходящихся для типа
Я хочу сделать мой случай класса Event[K, V]
по приказу ключа K
всегда. Но мне нужно уметь сравнивать события разных ценностей V
, Как я могу решить это расходящееся неявное расширение?
import scala.math.Ordering
object Event {
case class Event[K, V](key: K, value: V)
(implicit o: Ordering[K]) extends Ordered[Event[K, _]] {
override def compare(that: Event[K, _]): Int = o.compare(key, that.key)
}
}
object Main extends App {
// mimicking a librarys function
def lala[O](e: O)(implicit ordering: Ordering[O]) = ???
val b = Event.Event("a", 12) <= Event.Event("a", 11.99)
lala(Event.Event("a", 12))
}
Призыв к lala
не компилируется из-за этого расходящегося неявного расширения
diverging implicit expansion for type
scala.math.Ordering[Event.Event[String,Int]] starting with method $conforms
in object Predef lala(Event.Event("a", 12))
1 ответ
Решение
Если ваш библиотечный метод ожидает Ordering
Например, для вашего типа вы должны предоставить Ordered
, что совершенно неубедительно с точки зрения компилятора. Вместо этого попробуйте следующее:
case class Event[K, V](key: K, value: V)
object Event {
implicit def eventOrdering[K, V](implicit o: Ordering[K]) =
new Ordering[Event[K, V]] {
// ...
}
}