我需要为所有从单个特征派生的一堆案例类提供类型类实例,但是据我了解,Scala编译器期望特定类的实例并且不继承继承层次结构。所以这段代码:
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或其他方法来为基本特征定义单个类型类实例并避免重新排列。
猜你是说Printable[Concrete]
(也就是说,是Show
类型类实例)。
[Printable
可以通过添加-
符号来使它变逆: