在没有虚拟的情况下获取 Applicative Traversable 的索引
Get indices of Applicative Traversable without dummy
假设我有一些 v
,它既是 Applicative
又是 Traversable
。我怎样才能得到索引为 v
的 v
?对于具体示例,请考虑 Linear
中的 V3
。我要 V3 0 1 2
.
一种方法是使用 mapAccumL
和一个假人,例如:
snd $ T.mapAccumL
(\idx _ -> (idx + 1, idx))
0 (pure "") :: V3 Int
但是 (pure "")
假人感觉不雅。我们怎样才能以更优雅的方式做到这一点?
如果你只使用 Applicative
和 Traversable
,你就不会使用 pure
来逃脱。它是那些 类 中唯一的函数,它给你一个你的类型的值,但还没有 一个。
此外,您的假人决定了您构建的值的形状。考虑一种类型,例如列表,其中并非所有值都具有相同的形状:如何在构建 [0]
、[0,1]
或 [0,1,2]
之间做出选择? (一个基于 pure
的假人给你第一个。)
假设我有一些 v
,它既是 Applicative
又是 Traversable
。我怎样才能得到索引为 v
的 v
?对于具体示例,请考虑 Linear
中的 V3
。我要 V3 0 1 2
.
一种方法是使用 mapAccumL
和一个假人,例如:
snd $ T.mapAccumL
(\idx _ -> (idx + 1, idx))
0 (pure "") :: V3 Int
但是 (pure "")
假人感觉不雅。我们怎样才能以更优雅的方式做到这一点?
如果你只使用 Applicative
和 Traversable
,你就不会使用 pure
来逃脱。它是那些 类 中唯一的函数,它给你一个你的类型的值,但还没有 一个。
此外,您的假人决定了您构建的值的形状。考虑一种类型,例如列表,其中并非所有值都具有相同的形状:如何在构建 [0]
、[0,1]
或 [0,1,2]
之间做出选择? (一个基于 pure
的假人给你第一个。)