【问题标题】:covariance issue using shapeless使用无形的协方差问题
【发布时间】: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 进行完善的实现?还是有另一种更适合我想做的方法?

感谢您的指点。

【问题讨论】:

    标签: scala shapeless


    【解决方案1】:

    我被错误信息误导了:这里的问题是 :: 实际上是 scala.:: 而不是 shapeless.::(它没有被导入,只有 HList 是)。

    所以解决办法是

    import shapeless.{HList, ::}
    

    HList 协方差按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多