我在查看scalaz
并看到大多数monad都能够traversed List
,Option
,Identity
等,并想知道这是否意味着每个可遍历的对象也可以有一个序列 - consider。
如果事实确实如此(我确实可能是错的),那么例如Identity
的输出是什么:
Identity(Option(1))
会变成Option(Identity(1))
吗?或者我错过了什么,如果是这样的话,任何指针都会非常有帮助。
修改
我确实认为身份序列如下:
Identity(Option(1))
确实变为Option(Identity(1))
。所以问题的一部分得到了解决。
所以我的问题被改进为原始标题 - 每个可遍历的monad是否可以排序?
答案 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)。