我正在尝试通过Shapeless Poly这样的另一种方法:
object poly extends Poly1 {
implicit val caseInt = at[Int](_.toString)
implicit val caseString = at[String](_.toString)
}
def f[A, P <: Poly](a: A, p: P) = println(p(a))
这给
could not find implicit value for parameter cse: shapeless.poly.Case[p.type,shapeless.::[A,shapeless.HNil]]
关于如何使其有效的任何建议?
答案 0 :(得分:1)
Poly.apply
需要Case
隐式证据,这是您通过at[A]
辅助方法提供的。
我们需要向f
添加相同的隐式要求:
import shapeless._
import shapeless.PolyDefns.Case
def f[A, P <: Poly](a: A, p: P)(implicit cs: Case.Aux[p.type, shapeless.::[A, HNil], String]) =
println(p(a))