假设我有一些v,它既是Applicative,也是Traversable。怎样才能得到具有v索引的v?对于一个具体的例子,请考虑来自Linear的Linear。我要V3 0 1 2。
一种方法是将mapAccumL与虚拟人一起使用,例如:
snd $ T.mapAccumL
(\idx _ -> (idx + 1, idx))
0 (pure "") :: V3 Int但是(pure "")的假人感觉不雅致。我们如何才能以更优雅的方式做到这一点呢?
发布于 2015-03-21 07:04:27
如果您只使用pure和Traversable执行此操作,则不会使用Applicative逃避。它是这些类中唯一的函数,它为您提供了一个类型的值,而没有一个类型的值。
此外,您的虚拟决定您构造的值的形状。考虑一种类型,例如lists,其中并非所有的值都具有相同的形状:如何在构造[0]、[0,1]或[0,1,2]之间进行选择?( pure-based虚拟人给出了第一个。)
https://stackoverflow.com/questions/29180063
复制相似问题