我在看 scalaz 并看到大多数单子有能力 穿越 List, Option, Identity 等等,想知道这是否意味着每个可穿越的对象也可以具有序列 - 考虑.

如果实际上是这样的情况(我确实可能是错误的),那么 Identity 例如:

Identity(Option(1)) 这会变成 Option(Identity(1))?还是我错过了一些东西,如果是这样的话,任何指针都会非常有帮助。

编辑

确实,我对身份顺序是正确的:

Identity(Option(1)) 确实变成了 Option(Identity(1)). 。因此,该问题的一部分已经解决。

因此,我的问题被完善了原始标题 - 每个可遍历的单核测序是否可以?

有帮助吗?

解决方案

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]))

因此,是的,可以对具有可遍历实例的任何类型进行测序(甚至不需要成为单子)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top