Использование 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))
Другие вопросы по тегам