Shapeless 无法提供 Annotations.Aux 的隐式实例
Shapeless cannot provide implicit instance of Annotations.Aux
我正在尝试简化从案例 classes 中提取的注释,但我仍然希望尽可能保持通用。所以,我创建了一个简单的类型 class,它没有任何用处(目前),但它接受两个类型参数:
trait Show2[+A, -T] {
def show: Unit
}
我有一个简单的隐式函数来派生这种类型的实例class:
implicit def genericEncoder[A, T, ARepr <: HList](
implicit annotations: Annotations.Aux[A, T, ARepr]
): Show2[A, T] = new Show2[A, T] {
override def show: Unit = println(annotations())
}
基本上,它是 Annotations.Aux
的某种包装器。
为了测试,我使用数据 class 和注释 class 本身:
case class ann(v: Int) extends StaticAnnotation
case class C(@ann(1) s: String, @ann(2) i: Int)
所以,我希望在
之后会打印出一些东西
val encoder = implicitly[Show2[ann, C]]
encoder.show
但我得到 could not find implicit value for parameter e: Show2[Main2.ann,Main2.C]
。当我在 genericEncoder
中使用具体类型 ann
而不是泛型 A
时,它可以工作,但这不是我需要的。
任何想法,我在这里做错了什么?
它似乎不起作用,因为 Show2 类型类中的差异(Annotations.Aux 中的类型参数是不变的)
我正在尝试简化从案例 classes 中提取的注释,但我仍然希望尽可能保持通用。所以,我创建了一个简单的类型 class,它没有任何用处(目前),但它接受两个类型参数:
trait Show2[+A, -T] {
def show: Unit
}
我有一个简单的隐式函数来派生这种类型的实例class:
implicit def genericEncoder[A, T, ARepr <: HList](
implicit annotations: Annotations.Aux[A, T, ARepr]
): Show2[A, T] = new Show2[A, T] {
override def show: Unit = println(annotations())
}
基本上,它是 Annotations.Aux
的某种包装器。
为了测试,我使用数据 class 和注释 class 本身:
case class ann(v: Int) extends StaticAnnotation
case class C(@ann(1) s: String, @ann(2) i: Int)
所以,我希望在
之后会打印出一些东西val encoder = implicitly[Show2[ann, C]]
encoder.show
但我得到 could not find implicit value for parameter e: Show2[Main2.ann,Main2.C]
。当我在 genericEncoder
中使用具体类型 ann
而不是泛型 A
时,它可以工作,但这不是我需要的。
任何想法,我在这里做错了什么?
它似乎不起作用,因为 Show2 类型类中的差异(Annotations.Aux 中的类型参数是不变的)