每个可遍历的monad都有一个伴随的序列

时间:2013-11-08 08:23:44

标签: scala monads scalaz

我在查看scalaz并看到大多数monad都能够traversed ListOptionIdentity等,并想知道这是否意味着每个可遍历的对象也可以有一个序列 - consider

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

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

修改

我确实认为身份序列如下:

Identity(Option(1))确实变为Option(Identity(1))。所以问题的一部分得到了解决。

所以我的问题被改进为原始标题 - 每个可遍历的monad是否可以排序?

1 个答案:

答案 0 :(得分:3)

sequence可以非常简单地定义为具有身份功能的遍历 - 即。在哈斯克尔:

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

所以是的,任何具有可遍历实例的类型都可以排序(并且它甚至不需要是monad)。