有没有办法确保Scala中的类型类存在案例类复制方法?

时间:2018-09-07 02:08:10

标签: scala shapeless scala-macros

在下面的示例中,我有一个类型类Foo,并想以某种方式保证所有符合Foo的成员(例如Bar通过barFoo)都具有复制方法,例如通过case class生成的复制方法。我还没有想过这样做的方法。在这种情况下,复制签名可能类似于copy(foo: F, aa: List[T] = foo.aa, maybe: Option[T] = foo.maybe): F

trait Foo[F] {
  type T
  def aa(foo: F): List[T]
  def maybe(foo: F): Option[T]
}

final case class Bar(aa: List[String], maybe: Option[String])
object Bar {
  implicit val barFoo = new Foo[Bar] {
    type T = String
    def aa(foo: Bar): List[String] = foo.aa
    def maybe(foo: Bar): Option[T] = foo.maybe
  }
}

1 个答案:

答案 0 :(得分:1)

我不能用类型成员来做,但是这里你是一个带有类型参数的版本。另外,有必要在Foo中添加一个方法来构造对象。

.