Использование Shapeless Poly в другом методе
Я пытаюсь использовать 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]]
Любое предложение о том, как сделать это работает?
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))