代码之家  ›  专栏  ›  技术社区  ›  Lukasz

找不到参数f的隐式值:cats.applicative[f]

  •  2
  • Lukasz  · 技术社区  · 8 年前

    我正在学习一门关于猫的教程。

    教程给了我一个不应该编辑的猫面包库(使用slick),然后让我实现不同的方法。不幸的是,我被一些看起来很明显的东西困住了。

    我有办法

      def findByName(name: String)(implicit ec: ExecutionContext): DBIO[Option[Breed]] = {
        query.filter(_.name === name).result.headOption
      }
    

    在里面 breedsRepository 我应该实现以下方法:

    def findBreed(name: Either[Int, String]): DBIO[Either[Int, Breed]] = ???
    

    我想:

    def findBreed(name: Either[Int, String]): DBIO[Either[Int, Breed]] =
        name.traverse(n => breedsRepository.findByName(n).map(_.get))
    

    但我明白了 could not find implicit value for parameter F: cats.Applicative[F] 有人能帮我吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Dmytro Mitin    8 年前

    以下代码编译:

    import slick.jdbc.PostgresProfile.api._
    import scala.concurrent.ExecutionContext
    import scala.concurrent.ExecutionContext.Implicits.global
    import cats.implicits._
    import com.rms.miu.slickcats.DBIOInstances._
    
    object breedsRepository {   
      case class Breed(name: String, price: Double)
    
      class BreedTable(tag: Tag) extends Table[Breed](tag, "BREEDS") {
        def name = column[String]("NAME", O.PrimaryKey)
        def price = column[Double]("PRICE")
        def * = (name, price) <> (Breed.tupled, Breed.unapply)
      }
      val query = TableQuery[BreedTable]
    
      def findByName(name: String)(implicit ec: ExecutionContext): DBIO[Option[Breed]] = {
        query.filter(_.name === name).result.headOption
      }
    
      def findBreed(name: Either[Int, String]): DBIO[Either[Int, Breed]] =
        name.traverse[DBIO, Int, Breed](n => findByName(n).map(_.get))
    }
    

    SBT

    name := "slickdemo"
    
    version := "0.1"
    
    scalaVersion := "2.12.6"
    
    scalacOptions += "-Ypartial-unification"
    
    libraryDependencies ++= Seq(
      "com.typesafe.slick" %% "slick" % "3.2.3",
      "org.slf4j" % "slf4j-nop" % "1.6.4",
      "com.typesafe.slick" %% "slick-hikaricp" % "3.2.3"
    )
    
    libraryDependencies += "org.typelevel" %% "cats-core" % "1.0.1"
    
    libraryDependencies += "com.rms.miu" %% "slick-cats" % "0.7.1.1"