我已经看到一个名为"at"的对象(可能是一个函数)散布在整个无形源和使用无形的代码中.特别是,它用于解答另一个问题.这是代码片段:
object iterateOverHList extends Poly1 {
implicit def iterable[T, L[T] <: Iterable[T]] = at[L[T]](_.iterator)
}
Run Code Online (Sandbox Code Playgroud)
我有一些线索,它与〜>类型的apply方法有关."at"具体做什么,它在哪里定义?
试图映射自定义多态类的HList我得到了可怕的"无法找到参数映射器的隐式值"错误.代码示例:
import shapeless._
trait SubTrait
case class A() extends SubTrait
case class B() extends SubTrait
case class C[T <: SubTrait](x: T)
object TheMapper extends Poly1 {
implicit def default[T <: SubTrait, L[T] <: C[T]] = at[L[T]](_.x)
}
val ab = C(A()) :: C(B()) :: HNil
println(ab.map(TheMapper))
Run Code Online (Sandbox Code Playgroud)
如果L [T]的边界是例如Iterable(参见这个非常相似的问题,解决方案和注释),这可以正常工作.我错过了什么?