假设我有v
,Applicative
和Traversable
。如何获得v
的索引为v
?有关具体示例,请考虑V3
中的Linear
。我想要V3 0 1 2
。
一种方法是将mapAccumL
与假人一起使用,例如:
snd $ T.mapAccumL
(\idx _ -> (idx + 1, idx))
0 (pure "") :: V3 Int
但是(pure "")
假人感觉不够优雅。我们怎样才能以更优雅的方式做到这一点?
答案 0 :(得分:2)
如果您只使用pure
和Applicative
执行此操作,则不会使用Traversable
转义。它是这些类中唯一的函数,它为您提供了类型的值而没有拥有一个。
此外,您的假人确定您构造的值的形状。考虑诸如列表之类的类型,其中并非所有值都具有相同的形状:如何在构建[0]
,[0,1]
或[0,1,2]
之间做出选择? (基于pure
的假人给你第一个。)