Да, вы определенно можете написать функцию последовательности, специализированную для некоторой конкретной структуры данных.Версия 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)