无形zipWithKeys:找不到隐式参数

时间:2017-12-07 16:24:52

标签: scala shapeless hlist

我最近一直在玩弄无形。有一件非常基本的事情我无法解决这个问题:

import shapeless._
import syntax.singleton._
import record._

object NotWorking {
  val result = ("value" :: HNil).zipWithKeys("key" :: HNil)
} 

我希望这段代码能够输出可扩展的记录。但编译器无法找到withKeys隐含的内容:

could not find implicit value for parameter withKeys: shapeless.ops.hlist.ZipWithKeys[shapeless.::[String,shapeless.HNil],shapeless.::[String,shapeless.HNil]]
[error]     ("value" :: HNil).zipWithKeys("key" :: HNil)

它更令人困惑,因为我采用Shapeless'测试用例的例子完美无缺:

import shapeless._
import syntax.singleton._
import record._

object ShamelesslyStolenFromTests {
  val orig =
    ("intField" ->> 1) ::
    ("boolField" ->> true) ::
    HNil

  val result = orig.values.zipWithKeys(orig.keys)
}

我错过了什么?

1 个答案:

答案 0 :(得分:2)

以下代码编译:

  import shapeless._
  import syntax.singleton._
  import record._

  object FinallyWorking {
    val result = ("value" :: HNil).zipWithKeys[Witness.`"key"`.T :: HNil]("key".narrow :: HNil)
  }

所以这似乎是方法类型参数的类型推断的问题。