Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where is `sequence` in Scalaz7

I am learning Scalaz and I have a project that already makes use of Scalaz7. Following this question I would like to use the function

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

(not that it is hard to write it myself). But the aforementioned question mentions Scalaz6.

Where to find the sequence function in Scalaz7?

like image 601
Andrea Avatar asked Sep 04 '12 17:09

Andrea


1 Answers

It's defined in the scalaz.Traverse type class, where it looks like this:

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

scalaz.syntax.TraverseOps provides a version that gets pimped onto List, since List has a Traverse instance.

You can either import just what you need:

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

Or everything and the kitchen sink:

import scalaz._, Scalaz._

And then you can use it like this:

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

Or if you want exactly the formulation in your question:

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))
like image 175
Travis Brown Avatar answered Sep 19 '22 02:09

Travis Brown