通过父类型获取类型类实例

问题描述 投票:0回答:2

我需要为所有从单个特征派生的一堆案例类提供类型类实例,但是据我了解,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或其他方法来为基本特征定义单个类型类实例并避免重新排列。

scala typeclass implicit
2个回答
1
投票

猜你是说Printable[Concrete](也就是说,是Show类型类实例)。


1
投票

[Printable可以通过添加-符号来使它变逆:

© www.soinside.com 2019 - 2024. All rights reserved.