【发布时间】:2012-06-26 20:40:40
【问题描述】:
我正在尝试使用 shapeless 以类型安全的方式轻松累积对象。
问题是当我想连接 (:::) 两个 HList 时。我遇到了一个新手(至少看起来)问题。它错过了上下文中的 Prepend 隐式实例。
但是,查看hlist.scala,我可以看到在对象Prepend 和PrependAux 中定义了通用implicit def。
手动添加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 s。
【问题讨论】:
-
唯一的答案也已更新。它仍然有效。显然,我的解决方案中缺少的东西是 scalac 选项......
标签: scala functional-programming shapeless