2

我正在查看scalaz并看到大多数 monad 都具有被遍历 List的能力,等等Option​​,我Identity想知道这是否意味着每个可遍历的对象也可以有一个序列 -考虑一下

如果情况确实如此(我确实可能是错的),那么Identity例如的输出是什么:

Identity(Option(1))这会变成Option(Identity(1))吗?或者我错过了什么,如果是这样的话,任何指针都会非常有帮助。

编辑

事实上,关于身份序列如下,我是正确的:

Identity(Option(1))确实变成了Option(Identity(1))。所以这部分问题已经解决了。

所以我的问题被提炼为原始标题 - 每个可遍历的 monad 都可以排序吗?

4

1 回答 1

3

sequence可以非常直接地定义为使用恒等函数的遍历——即在 Haskell 中:

sequence = traverse id

或者在 Scalaz 6 中(来自上面的第二个链接),更加冗长:

def sequence[N[_], B](implicit
  a: A <:< N[B],
  t: Traverse[M],
  n: Applicative[N]
): N[M[B]] = traverse((z: A) => (z: N[B]))

所以是的,任何具有可遍历实例的类型都可以被排序(它甚至不需要是一个单子)。

于 2013-11-18T22:36:12.293 回答