And*_*rea 18 scala scalaz scalaz7
我正在学习Scalaz,我有一个已经使用Scalaz7的项目.关注这个问题我想使用这个功能
sequence[T](l: List[Option[T]]): Option[List[T]]
Run Code Online (Sandbox Code Playgroud)
(并不是说我自己写的很难).但上述问题提到了Scalaz6.
在Scalaz7中哪里可以找到序列函数?
Tra*_*own 29
它在scalaz.Traverse类型类中定义,它看起来像这样:
def sequence[G[_]:Applicative,A](fga: F[G[A]]): G[F[A]] =
traversal[G].run[G[A], A](fga)(ga => ga)
Run Code Online (Sandbox Code Playgroud)
scalaz.syntax.TraverseOps提供了一个被拉皮条的版本List,因为它List有一个Traverse实例.
你可以输入你需要的东西:
import scalaz._, std.list._, std.option._, syntax.traverse._
Run Code Online (Sandbox Code Playgroud)
或者一切和厨房水槽:
import scalaz._, Scalaz._
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
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))
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要在您的问题中完全符合要求:
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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2573 次 |
| 最近记录: |