scala scalaz scalaz7

¿Dónde está la ''secuencia'' en Scalaz7?



(1)

Estoy aprendiendo Scalaz y tengo un proyecto que ya usa Scalaz7. Siguiendo esta pregunta me gustaría usar la función

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

(No es que sea difícil escribirlo yo mismo). Pero la pregunta mencionada menciona a Scalaz6.

¿Dónde encontrar la función de secuencia en Scalaz7?


Se define en la clase de tipo scalaz.Traverse , donde se ve así:

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

scalaz.syntax.TraverseOps proporciona una versión que se complementa con List , ya que List tiene una instancia de Traverse .

Puedes importar lo que necesites:

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

O todo y el fregadero de la cocina:

import scalaz._, Scalaz._

Y luego puedes usarlo así:

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

O si quieres exactamente la formulación en tu pregunta:

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