【发布时间】:2016-07-23 04:55:51
【问题描述】:
考虑这个sn-p:
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],但我无法使 L 在特征 Issue 中协变,因为 L 出现在不变的位置。
有没有办法对Issue 进行完善的实现?还是有另一种更适合我想做的方法?
感谢您的指点。
【问题讨论】: