2012-09-04 10 views
17

Sto imparando Scalaz e ho un progetto che utilizza già Scalaz7. A seguito di this question Vorrei utilizzare la funzioneDov'è `sequence` in Scalaz7

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

(non che sia difficile scrivere io stesso). Ma la domanda di cui sopra cita Scalaz6.

Dove trovare la funzione di sequenza in Scalaz7?

risposta

27

E 'definito nella classe scalaz.Traverse tipo, dove sembra che questo:

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

scalaz.syntax.TraverseOps fornisce una versione che viene pimped su List, dal momento che dispone di un'istanza ListTraverse.

è possibile importare proprio quello che serve:

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

O tutto e il lavello della cucina:

import scalaz._, Scalaz._ 

E poi si può usare in questo modo:

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 se vuoi esattamente la formulazione nella tua domanda:

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