scala - Scalaz7中的“序列”在哪里

标签 scala scalaz scalaz7

我正在学习Scalaz,我有一个已经利用Scalaz7的项目。在this question之后,我想使用该功能

sequence[T](l: List[Option[T]]): Option[List[T]]


(并不是说很难自己写)。但是前面提到的问题提到了Scalaz6。


在Scalaz7的哪里可以找到顺序功能?

最佳答案

它在scalaz.Traverse类型类中定义,如下所示:

def sequence[G[_]:Applicative,A](fga: F[G[A]]): G[F[A]] =
  traversal[G].run[G[A], A](fga)(ga => ga)


由于scalaz.syntax.TraverseOps具有List实例,因此List提供了一个固定在Traverse上的版本。

您可以只导入所需的内容:

import scalaz._, std.list._, std.option._, syntax.traverse._


或一切和厨房水槽:

import scalaz._, Scalaz._


然后您可以像这样使用它:

scala> val xs: List[Option[Int]] = Some(1) :: Some(2) :: Nil
xs: List[Option[Int]] = List(Some(1), Some(2))

scala> xs.sequence
res0: Option[List[Int]] = Some(List(1, 2))


或者,如果您确实想要问题中的表述:

scala> def sequence[T](l: List[Option[T]]): Option[List[T]] = l.sequence
sequence: [T](l: List[Option[T]])Option[List[T]]

scala> sequence(xs)
res1: Option[List[Int]] = Some(List(1, 2))

关于scala - Scalaz7中的“序列”在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268351/

相关文章:

haskell - 为什么 fmap 必须映射 List 的每个元素?

xml - 如何使用内胚包装器来修复这个练习?

Scalaz:如何用值镜头组合 map 镜头?

scala - 为什么验证不是 Monad?

Scalaz Reader 到 ReaderT

字符串的Scala转换

scala - 找不到引擎 - PredictionIO

具有更高种类类型和方差的 scala 类型类

scala - 如何在 Spark 中设置 Parquet 文件编码

scalaz - Scalaz http 模块发生了什么?