考虑下面这段代码:
import shapeless.HList
sealed trait Issue[L <: HList] {
def content: L
def withT[T](t: T): Issue[T :: L]
}
private case class IssueImpl[L <: HList](content: L) extends Issue[L] {
def withT[T](t: T)(implicit ev: SomeEvidenceRegardingT[T]): Issue[T :: L] =
IssueImpl(t :: content)
}我在这里试图实现的是一个基于HList的结构,同时限制可以放在HList中的内容(因此withT附带了证据)
问题是Scala编译器抱怨IssueImpl[T :: L]不符合类型Issue[T :: L],但我不能使特征Issue中的L协变,因为L出现在不变的位置。
有没有办法让Issue有一个完善的实现?或者有没有其他更适合我想做的事情的方法?
谢谢你的指点。
发布于 2016-07-23 04:55:51
我被错误的消息误导了:这里的问题是::实际上是scala.::而不是shapeless.:: (它没有导入,只有HList导入)。
所以解决方案是
import shapeless.{HList, ::}HList协方差按预期工作。
https://stackoverflow.com/questions/38534936
复制相似问题