18

私はScalazを学んでいて、すでにScalaz7を利用しているプロジェクトがあります。この質問に続いて、私は関数を使用したいと思います

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

(自分で書くのは難しいというわけではありません)。しかし、前述の質問はScalaz6に言及しています。

Scalaz7のシーケンス関数はどこにありますか?

4

1 に答える 1

29

型クラスで定義され、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ため、にポンピングされるバージョンを提供します。ListTraverse

必要なものだけをインポートできます。

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))
于 2012-09-04T18:21:23.010 に答える