首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scodec - Coproducts找不到参数auto: scodec.codecs.CoproductBuilderAuto的隐式值

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

Stack Overflow用户
提问于 2014-11-15 02:55:54
回答 1查看 558关注 0票数 4

版本:

代码语言:javascript
复制
"org.typelevel" %% "scodec-core" % "1.5.0"

我正在尝试使用辅助产品功能,如测试用例演示如何将编解码器修复为已知的子类型。所示。

我一直收到错误:“无法为参数auto: scodec.codecs.CoproductBuilderAutomy.class.here”找到隐式值

我甚至复制粘贴了这个示例,但无法让它工作:

代码语言:javascript
复制
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

我会继续在我的一端调查这个问题,但我想知道最近是否有一个问题解决了。我克隆了回购程序,它从克隆中成功了--但当我使用发布的版本时就不行了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-15 04:14:52

示例代码中的错误是由于没有定义任何Sprocket子类型造成的。如果至少有一个子类型的Sprocket,那么无形能够生成一个LabelledGeneric[Sprocket]实例,其中表示是一个受歧视的联合。联合是标记子类型的共同产物。

添加以下内容可解决错误:

代码语言:javascript
复制
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]
}

请注意,您需要同时使用discriminatorcodec。如果没有定义discriminator,您将得到报告的错误。如果没有定义codec,您将得到一个发散的隐式错误。理论上,如果作用域中有一个隐式Woozle,那么可以自动导出Codec[Int]编解码器,但是scalac不能完成任务--相反,它会产生一个发散的隐式扩展错误。我们希望用无型2.1来改进这一点。

供参考,全文如下:

代码语言:javascript
复制
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
}

和建造:

代码语言:javascript
复制
scalaVersion := "2.11.4"

libraryDependencies += "org.typelevel" %% "scodec-core" % "1.5.0"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26942003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档