在另一种方法中使用无形多边形

时间:2018-07-10 02:51:51

标签: scala implicit generic-programming shapeless polymorphic-functions

我正在尝试通过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 个答案:

答案 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))