scala - Shapeless 无法提供 Annotations.Aux 的隐式实例
问题描述
我正在尝试简化从案例类中提取的注释,但我仍然希望尽可能保持通用性。所以,我创建了一个简单的类型类,它没有任何用处(目前),但它接受两个类型参数:
trait Show2[+A, -T] {
def show: Unit
}
我有一个简单的隐式函数来派生这个类型类的实例:
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
。
为了测试我使用数据类和注释类本身:
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]
。当我使用具体类型ann
而不是通用类型时A
,genericEncoder
它可以工作,但这不是我需要的。
任何想法,我在这里做错了什么?
解决方案
由于 Show2 类型类中的差异,它似乎不起作用(Annotations.Aux 中的类型参数是不变的)
推荐阅读
- apache-kafka - 如何将Kafka消费者组中的消费者偏移量提前到最后?
- c# - 在 ASP.NET MVC 6 中上传文件
- php -
- javascript - React - 使用 API 中的数据填充选择下拉列表
- javascript - 调用 clearInterval 后 setInterval 继续运行
- kubernetes - 在 kubernetes 中使用域部署入口 nginx
- python - 稀疏连接的网络 Keras
- c# - 使用 BlobContainerClient 将大型文件上传到 Azure
- dataweave - Mulesoft DataWeave:如何为带引号的字符串转义 $
- javascript - 有没有办法在 React JS 中查看已映射数组中的特定项目?