首页 > 解决方案 > 编译 sbt 时找不到隐式值

问题描述

我有一个配置了Dependencias.scala, build.sbt,的 sbt 项目,plugins.sbt我有这个依赖:https ://christopherdavenport.github.io/cormorant/

 lazy val `cormorant-core`         = "io.chrisdavenport"       %% "cormorant-core"           % Version.cormorant
  lazy val `cormorant-generic`      = "io.chrisdavenport"       %% "cormorant-generic"        % Version.cormorant
  lazy val `cormorant-parser`       = "io.chrisdavenport"       %% "cormorant-parser"         % Version.cormorant
  lazy val `cormorant-http4s`       = "io.chrisdavenport"       %% "cormorant-http4s"         % Version.cormorant
  lazy val `cormorant-refined`      = "io.chrisdavenport"       %% "cormorant-refined"        % Version.cormorant

当我编译它时:sbt compile,它出现了这个错误:

[error] /home/javier/IdeaProjects/ERPFetcherJavs/src/main/scala/com/arkondata/bipo/utils/CSVHandler.scala:11:53: could not find implicit value for parameter gen: shapeless.LabelledGeneric.Aux[A,H]
[error]   private implicit val lr: LabelledRead[ItemData] = deriveLabelledRead
[error]                                                     ^
[error] /home/javier/IdeaProjects/ERPFetcherJavs/src/main/scala/com/arkondata/bipo/utils/CSVHandler.scala:13:54: could not find implicit value for parameter gen: shapeless.LabelledGeneric.Aux[A,H]
[error]   private implicit val lw: LabelledWrite[ItemData] = deriveLabelledWrite
[error]                                                      ^
[error] two errors found
[error] (Compile / compileIncremental) Compilation failed

我该如何解决?

标签: scalasbtimplicit

解决方案


假设ItemData是一个简单的案例类,例如:

case class ItemData(a: String)

然后,当运行上面的代码时,上面的错误会重现。为什么会这样?

deriveLabelledRead是 at 的一个方法package io.chrisdavenport.cormorant.generic,它需要 2 个隐式:

def deriveLabelledRead[A, H <: HList](
  implicit gen: LabelledGeneric.Aux[A, H],
  hlw: Lazy[LabelledRead[H]])

阅读完文档后,我们需要进行大量导入:

import io.chrisdavenport.cormorant._
import io.chrisdavenport.cormorant.generic.semiauto._
import io.chrisdavenport.cormorant.parser._
import io.chrisdavenport.cormorant.implicits._
import cats.implicits._
import java.util.UUID
import java.time.Instant

导入这些时,deriveLabelledRead具有需要正确创建的隐式。


推荐阅读