在没有虚拟的情况下获取Applicative Traversable的索引

时间:2015-03-21 06:48:24

标签: haskell applicative traversable

假设我有vApplicativeTraversable。如何获得v的索引为v?有关具体示例,请考虑V3中的Linear。我想要V3 0 1 2

一种方法是将mapAccumL与假人一起使用,例如:

snd $ T.mapAccumL 
    (\idx _ -> (idx + 1, idx)) 
    0 (pure "") :: V3 Int

但是(pure "")假人感觉不够优雅。我们怎样才能以更优雅的方式做到这一点?

1 个答案:

答案 0 :(得分:2)

如果您只使用pureApplicative执行此操作,则不会使用Traversable转义。它是这些类中唯一的函数,它为您提供了类型的值而没有拥有一个。

此外,您的假人确定您构造的值的形状。考虑诸如列表之类的类型,其中并非所有值都具有相同的形状:如何在构建[0][0,1][0,1,2]之间做出选择? (基于pure的假人给你第一个。)