scala – Scodec – Coproducts找不到参数auto的隐含值:scodec.
发布时间:2020-12-16 18:08:03 所属栏目:安全 来源:网络整理
导读:在版本上: "org.typelevel" %% "scodec-core" % "1.5.0" 我正在尝试使用coproduct功能,如测试用例demonstrate fixing the codec to a known subtype所示. 我一直收到错误:“找不到参数auto的隐含值:scodec.codecs.CoproductBuilderAuto [my.class.here]”
在版本上:
"org.typelevel" %% "scodec-core" % "1.5.0" 我正在尝试使用coproduct功能,如测试用例demonstrate fixing the codec to a known subtype所示. 我一直收到错误:“找不到参数auto的隐含值:scodec.codecs.CoproductBuilderAuto [my.class.here]” 我甚至复制粘贴的例子,无法让它工作: import scalaz./ import shapeless._ import scodec.bits._ import scodec.codecs._ import scodec._ sealed trait Sprocket object Sprocket { implicit val discriminated: Discriminated[Sprocket,Int] = Discriminated(uint8) } def codec(d: Int): Codec[Sprocket] = Codec.coproduct[Sprocket].discriminatedBy(provide(d)).auto 我会在最后继续研究这个问题,但是想知道最近是否有一个问题已经解决了.我克隆了repo,它从克隆开始工作 – 但是当我使用发布的版本时却没有. 解决方法
示例代码中的错误是由于没有定义Sprocket的任何子类型引起的.如果Sprocket至少有1个子类型,那么Shapeless能够生成LabelledGeneric [Sprocket]实例,其中表示是一个有区别的联合.联合是标记的亚型的副产品.
添加以下内容可解决错误: case class Woozle(x: Int,y: Int) extends Sprocket object Woozle { implicit val discriminator: Discriminator[Sprocket,Woozle,Int] = Discriminator(1) implicit val codec: Codec[Woozle] = (uint8 :: uint8).as[Woozle] } 请注意,您需要同伴中的鉴别器和编解码器含义.如果未定义鉴别器,您将收到报告的错误.如果未定义编解码器,则会出现分歧的隐式错误.从理论上讲,如果范围内存在隐式Codec [Int],则可以自动导出Woozle编解码器,但是scalac不能胜任任务 – 相反,它会因发散的隐式扩展错误而失败.我们希望通过Shapeless 2.1改进这一点. 供参考,完整来源: import scalaz./ import shapeless._ import scodec.bits._ import scodec.codecs._ import scodec._ sealed trait Sprocket object Sprocket { implicit val discriminated: Discriminated[Sprocket,Int] = Discriminated(uint8) } case class Woozle(x: Int,Int] = Discriminator(1) implicit val codec: Codec[Woozle] = (uint8 :: uint8).as[Woozle] } object Main extends App { def codec(d: Int): Codec[Sprocket] = Codec.coproduct[Sprocket].discriminatedBy(provide(d)).auto } 并建立: scalaVersion := "2.11.4" libraryDependencies += "org.typelevel" %% "scodec-core" % "1.5.0" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |