我正在尝试使用cats库https://typelevel.org/cats/typeclasses/traverse.html中的traverse
(或与我的任务几乎相同的sequence
)。我想遍历具有功能List[A]
的{{1}}以获得A => Either[L,R]
的结果。
考虑以下小示例(我使用scala-2.12.6,cats-core-1.3.1,sbt-1.1.2):
Either[L,List[R]]
它不编译,它给出:
import cats.implicits._
def isOdd(i: Int): Either[String, Int] =
if (i % 2 != 0) Right(i) else Left("EVEN")
val odd: Either[String, List[Int]] = (1 to 10).toList.traverse(isOdd)
答案 0 :(得分:1)
部分统一编译器标志是必需的。在Scala 2.12中
在scalacOptions += "-Ypartial-unification"
中添加build.sbt
感谢托马斯