1

我正在尝试在另一种方法中使用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]]

关于如何使它起作用的任何建议?

4

1 回答 1

2

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))
于 2018-07-10T06:23:09.077 回答