2012-09-04 15 views
17

Scalaz’ı öğreniyorum ve zaten Scalaz7’yi kullanan bir projem var. this question ardından ben fonksiyonu (o kendim yazmak zordur değil)Scalaz7`de `sequence`` nerede

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

kullanmak istiyorum. Ancak yukarıda bahsedilen soru Scalaz6'dan bahseder.

Scalaz7'de dizi işlevi nerede bulunur?

cevap

27

O şöyle scalaz.Traverse tipi sınıfında, tanımlanmış oluyor:

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

scalaz.syntax.TraverseOpsList üzerine pimped alır sürümü sağlamaktadır, List bir Traverse örneği vardır çünkü.

Ya ithalat ihtiyacınız olabilir sadece ne:

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

Ya her şey ve mutfak lavabo:

import scalaz._, Scalaz._ 

Ve sonra bunları gibi kullanabilirsiniz:

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

Veya sorunuzda tam olarak formülasyonu istiyorsanız:

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