List[String] 没有来自 cats 的成员遍历
List[String] does not have a member traverse from cats
我正在尝试使用 cats
中的 traverse
将 List[Either[Int]]
转换为 Either[List[Int]]
。
错误
[error] StringCalculator.scala:19:15: value traverseU is not a member of List[String]
[error] numList.traverseU(x => {
代码
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 => {}
)
I have tried the same with traverse instead of traverseU as well.
配置(猫)
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
)
它确实应该只是 traverse
,只要您使用的是最新的猫版本 (1.0.x),但是,您不能同时导入两者 cats.syntax
和 cats.implicits._
因为它们会发生冲突。
不幸的是,每当 Scala 编译器发现隐式冲突时,它都会给你一个非常无用的消息。
删除 cats.syntax
导入,它应该可以正常工作。
有关更多信息,请查看 import guide.
您只需要 cats.implicits._
。例如
import cats.implicits._
val numbers = "1,2,3"
val numList = numbers.split(',').toList
val lst = numList.traverse(x => scala.util.Try(x.toInt).toEither.leftMap(_ => 0))
println(lst)
我正在尝试使用 cats
中的 traverse
将 List[Either[Int]]
转换为 Either[List[Int]]
。
错误
[error] StringCalculator.scala:19:15: value traverseU is not a member of List[String]
[error] numList.traverseU(x => {
代码
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 => {}
)
I have tried the same with traverse instead of traverseU as well.
配置(猫)
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
)
它确实应该只是 traverse
,只要您使用的是最新的猫版本 (1.0.x),但是,您不能同时导入两者 cats.syntax
和 cats.implicits._
因为它们会发生冲突。
不幸的是,每当 Scala 编译器发现隐式冲突时,它都会给你一个非常无用的消息。
删除 cats.syntax
导入,它应该可以正常工作。
有关更多信息,请查看 import guide.
您只需要 cats.implicits._
。例如
import cats.implicits._
val numbers = "1,2,3"
val numList = numbers.split(',').toList
val lst = numList.traverse(x => scala.util.Try(x.toInt).toEither.leftMap(_ => 0))
println(lst)