我正在尝试使用 shapeless 以类型安全的方式轻松地积累对象。
问题是当我想连接(:::
)两个时HList
。我遇到了一个新手(至少看起来)问题。它错过了Prepend
上下文中的隐式实例。
但是,查看hlist.scala
,我可以看到泛型implicit def
在对象Prepend
和PrependAux
.
添加import Prepend
和import PrependAux
手动并没有改变任何东西(显然......)。
所以这里的代码减少到最低限度:
enter code here
import shapeless._
import HList._
import Prepend._
import PrependAux._
object test {
val a:HList = 1 :: 4 :: "A" :: HNil
val b:HList = "R" :: false :: HNil
val c:HList = a ::: b // <<<<<<<<<<< NEEDS A Prepend in the context
}
现在在控制台中:
[error] test.scala:10: could not find implicit value for parameter prepend: shapeless.Prepend[shapeless.HList,shapeless.HList]
[error] val c:HList = a ::: b // this needs an implicit Prepend in the current context
什么应该灼伤我的眼睛?
谢谢
编辑
稍微更新一下,把真正的问题重新复杂化了一点,因为之前要粗俗化是要强烈的。
这是我能做的事情:
case class A[L<:HList](a:L) {
def doSmth[C <:HList](c:C) = a ::: c
}
所以我无法访问真正的类型,只有我知道它们是HList。