昨晚在回答这个问题时,我注意到以下几点:
scala> val foo: Option[Set[Int]] = Some(Set(1, 2, 3))
foo: Option[Set[Int]] = Some(Set(1, 2, 3))
scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._
scala> foo.sequenceU
res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
也就是说,如果foo
是一个可选的整数集,则对其排序会返回一组整数。
这不是我一开始所期望的,因为排序 aF[G[A]]
应该返回 a G[F[A]]
(假设它F
是可遍历的并且G
是一个 applicative functor)。但是,在这种情况下,Option
图层就会消失。
Set
我知道这可能与其中一种超类型和Unapply
使工作的机器之间的某些交互有关sequenceU
,当我能找到几分钟的时间时,我打算研究这些类型并写下正在发生的事情的描述.
不过,这似乎是一个可能很有趣的小谜题,我想我会把它贴在这里,以防有人能打败我的答案。