【发布时间】:2013-05-31 13:21:32
【问题描述】:
昨晚在回复this question时,我注意到以下内容:
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 是一个可选的整数集,则对其排序会返回一个整数集。
这不是我最初的预期,因为对F[G[A]] 进行排序应该返回G[F[A]](假设F 是可遍历的并且G is an applicative functor)。不过,在这种情况下,Option 层就消失了。
我知道这可能与Set 的超类型之一和使sequenceU 工作的Unapply 机器之间的某些交互有关,当我能找到几分钟的时间时,我正计划工作通过类型并写下正在发生的事情的描述。
不过,这似乎是一个可能很有趣的小谜题,我想我会把它贴在这里,以防有人能比我找到答案。
【问题讨论】:
标签: scala types scalaz scalaz7