开发者

New to 2.8 collections. What would this signature look like? Similar to scalaz sequence

I found a blog post today that mention's scalaz's sequence function.

Couldn't you do something as simple as:

if (l contains 开发者_运维问答None) None else l

If so, what would this function signature look like? contains is in SeqLike, right?

Also, from the blog post I thought sequence was going to be something similar to map, but one that would break once None is encountered. Is there something like this?


Yes, you could, but it should be:

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

The code in the blog post tries to write that function as general as possible (using scalaz' abstractions), so it will work not only for Options in a Seq.

[Edit] Corrected


Yes you can definitely write the sequence function specialized to some specific data structure. The Scalaz version, however is as general as possible. So it will work for any combination of F and G for which F[G[A]] => G[F[A]] is possible.

The other function you're looking for is called traverse. It has the signature

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

x.traverse(f) is equivalent to x.map(f).sequence.

x.sequence is equivalent to x.traverse(a => a)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜