Scalaz7中的`sequence`在哪里?

时间:2012-09-04 17:14:49

标签: scala scalaz scalaz7

我正在学习Scalaz,我有一个已经使用Scalaz7的项目。关注this question我想使用函数

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

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

  

在Scalaz7中哪里可以找到序列函数?

1 个答案:

答案 0 :(得分:28)

它在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))