1

假设我有一些v,既是Applicative又是Traversable。我怎样才能得到 av的索引v?举一个具体的例子,考虑V3Linear. 我想要V3 0 1 2

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

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

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

4

1 回答 1

2

pure如果您只使用Applicativeand执行此操作,您将不会逃避使用Traversable。它是这些类中唯一可以为您提供类型值但尚未拥有的函数。

此外,您的假人决定了您构造的值的形状。考虑一种类型,例如列表,其中并非所有值都具有相同的形状:您如何在构造或[0]之间进行选择?(基于 A 的 dummy 为您提供第一个。)[0,1][0,1,2]pure

于 2015-03-21T07:04:27.840 回答