Мне нужно предоставить экземпляры классов типов для группы классов, все они получены из одной черты, но, насколько я понимаю, Scala компилятор ожидает экземпляр для указанного c класса и не go вверх по иерархии наследования. Поэтому этот код:
trait Base
sealed trait Child extends Base
case class Concrete() extends Child
trait Printable[A] {
def print(value: A): String
}
object WtfTrait {
def print[A](x: A)(implicit ev: Printable[A]) = {
println(ev.print(x))
}
implicit val printableBase = new Printable[Base] {
override def print(value: Base): String = value.toString
}
val x = Concrete()
print(x)
}
не компилируется с ошибкой чтения could not find implicit value for parameter ev: Printable[Impl]
. Есть ли способ определить экземпляр класса одного типа для базовой черты и избежать повторения, возможно, используя Shapeless или что-то еще.