2012-09-04 32 views
17

Estoy aprendiendo Scalaz y tengo un proyecto que ya hace uso de Scalaz7. Siguiendo this question me gustaría utilizar la función¿Dónde está `sequence` en Scalaz7

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

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

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

Respuesta

27

Es definido en la clase scalaz.Traverse tipo, en el que 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 consiga chulo en List, ya List tiene una instancia Traverse.

puede importarla justo lo que necesita:

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

O todo y el fregadero de la cocina:

import scalaz._, Scalaz._ 

Y entonces se puede utilizar de esta manera:

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 desea exactamente la formulación en su 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))