jed*_*sah 4 scala typeclass type-level-computation shapeless scala-macros
Shapeless有一个简洁的类型派生机制,允许您定义类型类并获得任何类型类的自动派生.
要将派生机制用作类型类的用户,可以使用以下语法
import MyTypeClass.auto._
Run Code Online (Sandbox Code Playgroud)
据我所知,它相当于
import MyTypeClass.auto.derive
Run Code Online (Sandbox Code Playgroud)
当您尝试在同一范围内尝试使用多个类型类时会出现问题.看起来Scala编译器只考虑了derive的最后一个定义,即使它的隐式参数有两个版本的函数"重载".
我可以通过几种方法来解决这个问题.我不会在这里列出它们,而是将它们标记为答案,您可以投票确认理智并提出任何更好的解决方案.
我在四月提出了这个问题并提出了两个解决方案:自己定义方法(正如你的建议):
object AutoCodecJson {
implicit def deriveEnc[T] = macro deriveProductInstance[EncodeJson, T]
implicit def deriveDec[T] = macro deriveProductInstance[DecodeJson, T]
}
Run Code Online (Sandbox Code Playgroud)
或使用别名导入:
import AutoEncodeJson.auto.{ derive => deriveEnc }
import AutoDecodeJson.auto.{ derive => deriveDec }
Run Code Online (Sandbox Code Playgroud)
我强烈建议使用别名进口 - 迈尔斯自己说 "没想到那个宏会被重复使用:不确定我是否批准"这种deriveProductInstance方法.
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |