Новое в 2.8 коллекции. Как будет выглядеть эта подпись? Похож на последовательность скаляза - PullRequest
1 голос
/ 03 октября 2010

Сегодня я нашел сообщение в блоге , в котором упоминается последовательность * скаляса .

Не могли бы вы сделать что-то простое, как:

if (l contains None) None else l

Если это так, как будет выглядеть эта сигнатура функции? содержит в SeqLike, верно?

Кроме того, из поста в блоге я подумал, что последовательность будет чем-то похожим на карту, но та, которая сломается, если не встретится ни один Есть ли что-то подобное?

Ответы [ 2 ]

2 голосов
/ 03 октября 2010

Да, вы могли бы, но это должно быть:

if (l contains None) None else Some(l.map(_.get))

Код в посте блога пытается написать эту функцию как можно более общей (используя абстракции scalaz), поэтому она будет работать не только для Options в следующем.

[Редактировать] Исправлено

1 голос
/ 05 октября 2010

Да, вы определенно можете написать функцию последовательности, специализированную для некоторой конкретной структуры данных.Версия Scalaz, однако, является как можно более общей.Таким образом, он будет работать для любой комбинации F и G, для которой возможно F[G[A]] => G[F[A]].

Другая функция, которую вы ищете, называется traverse.Он имеет подпись

def traverse[F[_]:Traverse,G[_]:Applicative,A,B](m: F[A], f: A => G[B]): G[F[B]]

x.traverse(f) эквивалентно x.map(f).sequence.

x.sequence эквивалентно x.traverse(a => a)

...