scala - 在 Scala 中遍历
问题描述
我写了以下简单的代码:
import cats.effect.IO
import cats.instances.either._
import cats.syntax.TraverseSyntax
object Test extends App with TraverseSyntax{
val e: Either[String, IO[Int]] = Right(IO(2))
e.sequence //error here
}
不幸的是,它拒绝与
Error:(25, 94) value sequence is not a member of scala.util.Either
你能解释一下为什么吗?我导入either
了包括Traverse[Either[A, ?]]
. 怎么了?
解决方案
除了 Kolmar 的回答(非常彻底)之外,我还想提出一个替代且更简单的解决方案。
自 Scala 2.11.9 以来就有一个编译器标志,它允许它识别具有多个类型参数的类型何时应该表现得像只有一个类型参数的类型。我们称之为“部分统一”。
启用部分统一的最简单方法是添加sbt-partial-unification
插件。
如果您使用的是 Scala 2.11.9 或更高版本,您还可以简单地添加编译器标志:
scalacOptions += "-Ypartial-unification"
然后你的代码编译没有问题:
import cats.effect.IO
import cats.instances.either._
import cats.syntax.TraverseSyntax
object Test extends App with TraverseSyntax {
val e: Either[String, IO[Int]] = Right(IO(2))
e.sequence // No more error here
}
在最近发布的 Scala 2.13 中,它现在默认开启,所以它应该可以开箱即用。
推荐阅读
- sql - 使用 COALESCE 的 SQL ROLLUP
- sql - SQL 查找具有不同 ID 的重复名称
- apache-spark - Pyspark - 过滤包含空值的 ArrayType 行
- linux - SeedLabs 防火墙实验室:实现一个简单的内核模块,构建内核模块失败
- linux - 如何在 Linux 服务器上安装 Mosquitto MQTT
- hive - HiveSQL IF ELSE STATMENT 条件从 GreenPlum 迁移
- wordpress - 如何通过.htaccess在单页上设置403 Forbidden
- pytorch - in_features 和 out_features 应该是什么?
- android - 在多语言 Android 应用程序中处理 TextView 中的混合语言文本
- geoserver - 带有 nodata 的 Geoserver WMTS 插件