找不到隐式参数的值(可扩展记录)
Cannot find value for implicit parameters (extensible records)
我有一个如下所示的函数:
def fun[T <: HList](l: T)(implicit k: HKernelAux[T], ft: FromTraversable[T]) = ???
当我传递 HList
类型的参数时,此函数起作用。如果我传递一个可扩展记录,它只是一个带有标签的 HList
,则无法找到隐式参数的值。这是为什么?有没有一种方法可以使该函数适用于 HList
s 和可扩展记录,或者我可以提供另一个适用于可扩展记录的函数吗?
问题是找不到 FieldType[Witness.`'key`.T, ValueType]
的 Typeable
实例。
尝试修改函数:
import shapeless.{HList, HNil}
import shapeless.ops.hlist.HKernelAux
import shapeless.ops.traversable.FromTraversable
import shapeless.ops.record.Values
def fun[T <: HList, T1 <: HList](l: T)(implicit v: Values.Aux[T, T1], k: HKernelAux[T1], ft: FromTraversable[T1]) = {
//use l.values instead of l
}
用法:
import shapeless.syntax.singleton._
fun('a ->> 1 :: 'b ->> "x" :: HNil) // compiles
我有一个如下所示的函数:
def fun[T <: HList](l: T)(implicit k: HKernelAux[T], ft: FromTraversable[T]) = ???
当我传递 HList
类型的参数时,此函数起作用。如果我传递一个可扩展记录,它只是一个带有标签的 HList
,则无法找到隐式参数的值。这是为什么?有没有一种方法可以使该函数适用于 HList
s 和可扩展记录,或者我可以提供另一个适用于可扩展记录的函数吗?
问题是找不到 FieldType[Witness.`'key`.T, ValueType]
的 Typeable
实例。
尝试修改函数:
import shapeless.{HList, HNil}
import shapeless.ops.hlist.HKernelAux
import shapeless.ops.traversable.FromTraversable
import shapeless.ops.record.Values
def fun[T <: HList, T1 <: HList](l: T)(implicit v: Values.Aux[T, T1], k: HKernelAux[T1], ft: FromTraversable[T1]) = {
//use l.values instead of l
}
用法:
import shapeless.syntax.singleton._
fun('a ->> 1 :: 'b ->> "x" :: HNil) // compiles