Где "последовательность" в Scalaz7 - программирование

Где "последовательность" в Scalaz7

Я изучаю Scalaz, и у меня есть проект, который уже использует Scalaz7. Следуя этому вопросу, я хотел бы использовать функцию

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

(не то, что это трудно написать). Но в вышеупомянутом вопросе упоминается Scalaz6.

Где найти функцию последовательности в Scalaz7?

4b9b3361

Ответ 1

Он определен в классе scalaz.Traverse, где он выглядит так:

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

scalaz.syntax.TraverseOps предоставляет версию, которая получает pimped на List, так как List имеет экземпляр Traverse.

Вы можете импортировать только то, что вам нужно:

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

Или все и кухонная раковина:

import scalaz._, Scalaz._

И тогда вы можете использовать его следующим образом:

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

Или, если вы хотите точно сформулировать формулировку в своем вопросе:

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