gpt4 book ai didi

scala - Scodec - Coproducts 找不到参数 auto 的隐式值 : scodec. codecs.CoproductBuilderAuto

转载 作者:行者123 更新时间:2023-12-02 00:45:56 24 4
gpt4 key购买 nike

版本:

"org.typelevel" %% "scodec-core" % "1.5.0"

我正在尝试使用余积功能,如测试用例 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

我会继续调查这个问题,但想知道最近是否有解决这个问题的问题。我克隆了该存储库,并且它可以从克隆中运行 - 但当我使用发布版本时则不行。

最佳答案

示例代码中的错误是由于没有定义 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, y: Int) extends Sprocket
object Woozle {
implicit val discriminator: Discriminator[Sprocket, Woozle, 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"

关于scala - Scodec - Coproducts 找不到参数 auto 的隐式值 : scodec. codecs.CoproductBuilderAuto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com