List [String]没有来自cats的成员遍历

vam*_*olu 4 scala traversal either scala-cats

我试图转换成一个List[Either[Int]]一个来Either[List[Int]]使用traversecats.

错误

[error] StringCalculator.scala:19:15: value traverseU is not a member of List[String]
[error]       numList.traverseU(x => {
Run Code Online (Sandbox Code Playgroud)

  import cats.Semigroup
  import cats.syntax.traverse._
  import cats.implicits._


  val numList = numbers.split(',').toList
  numList.traverseU(x => {
      try {
          Right(x.toInt)
      } catch {
        case e: NumberFormatException => Left(0)
      }
    })
      .fold(
        x => {},
        x => {}
      )
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用traverse而不是traverseU.

配置(用于猫)

lazy val root = (project in file(".")).
  settings(
    inThisBuild(List(
      organization := "com.example",
      scalaVersion := "2.12.4",
      scalacOptions += "-Ypartial-unification",
      version      := "0.1.0-SNAPSHOT"
    )),
    name := "Hello",
    libraryDependencies += cats,
    libraryDependencies += scalaTest % Test
  )
Run Code Online (Sandbox Code Playgroud)

Luk*_*itz 8

它确实应该只是traverse,只要您使用最近的猫版本(1.0.x),但是,您不能同时导入它们cats.syntax,cats.implicits._因为它们会发生冲突.

不幸的是,每当Scala编译器发现implicits冲突时,它都会给你一个非常无益的消息.

删除cats.syntax导入,它应该工作正常.有关详细信息,请查看导入指南.