首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >值序列不是cats.Applicative[F]的成员

值序列不是cats.Applicative[F]的成员
EN

Stack Overflow用户
提问于 2021-05-27 20:55:17
回答 1查看 181关注 0票数 0

我正在把一些基于黄沙的代码迁移到分类猫上。

项目/plugins.sbt

代码语言:javascript
复制
addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)

build.sbt

代码语言:javascript
复制
scalacOptions ++= Seq("-feature", "-deprecation", "-Xlint", "-Xfatal-warnings", "-Ypartial-unification")
scalaVersion := "2.12.10"

旧的基于scalaz的代码中的依赖项是

libraryDependencies += "com.github.julien-truffaut" %%% "monocle-macro" % "1.4.8"

这是一个老的基于scalaz代码的实现,我想要迁移到猫上。

代码语言:javascript
复制
import scalaz.Applicative
import scalaz.std.list._
import scalaz.syntax.applicative._
import scala.language.higherKinds
import monocle.PTraversal

def letterTraversal(predicate: Char ⇒ Boolean): PTraversal[String, String, Char, Char] = new PTraversal[String, String, Char, Char] {
         override def modifyF[F[_]: Applicative](f: Char ⇒ F[Char])(s: String): F[String] = {
           Applicative[F].sequence(s.toList map {
             case x if predicate(x) ⇒ f(x)
             case x ⇒ Applicative[F].point(x)
           }).map(_.mkString)
         }
     }

基于新代码猫的代码中的依赖项是

libraryDependencies += "com.github.julien-truffaut" %%% "monocle-macro" % "2.0.0"

这是我的新密码

代码语言:javascript
复制
import scala.language.higherKinds
import monocle.PTraversal
import cats.Applicative
import cats.implicits._

    def letterTraversal(predicate: Char ⇒ Boolean): PTraversal[String, String, Char, Char] = new PTraversal[String, String, Char, Char] {
            override def modifyF[F[_]: Applicative](f: Char ⇒ F[Char])(s: String): F[String] = {
              Applicative[F].sequence(s.toList map {
                case x if predicate(x) ⇒ f(x)
                case x ⇒ Applicative[F].point(x)
              }).map(_.mkString)
            }
        }
代码语言:javascript
复制
When I do `sbt clean compile` I get the below error -

/Users/rajkumar.natarajan/Documents/Coding/OS/reftree/demo/jvm/src/main/scala/reftree/demo/Data.scala:07:22:值序列

错误不是cats.ApplicativeF ApplicativeF.sequence(s.toList map {)的成员

错误^错误发现了一个错误

error编译失败

错误总时间: 32秒,2021年5月27日完成,下午4:36:58

为什么即使我在作用域中添加了ApplicativeF,也不能获得import cats.implicits._的序列函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-27 22:58:27

习惯的写作方式应该是这样的:

代码语言:javascript
复制
import cats.syntax.all._
…
          s.toList.traverse {
            case x if predicate(x) ⇒ f(x)
            case x ⇒ x.pure[F]
          }.map(_.mkString)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67729866

复制
相关文章

相似问题

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