Предположим, у меня есть v
, который равен Applicative
, а также Traversable
. Как я могу получить v
с индексами v
? Для конкретного примера рассмотрим V3
от Linear
. Я хочу V3 0 1 2
.Получить индексы Аппликативного траверса без манекена
Один из способов заключается в использовании mapAccumL
с соской, например:
snd $ T.mapAccumL
(\idx _ -> (idx + 1, idx))
0 (pure "") :: V3 Int
Но (pure "")
манекен чувствует себя безвкусный. Как мы можем сделать это более элегантно?
Релевантно: [Как использовать объектив в Haskell для дублирования «перечисления» Python?] (Http://stackoverflow.com/questions/29125149/how -would-i-use-lens-in-haskell-to-duplicate-pythons-enumerate) – dfeuer
В чем дело с пустой строкой? Если вы хотите «ничего интересного» значения, канонический выбор - '()'. – dfeuer
Ссылка post @dfeuer содержит несколько хороших альтернативных подходов, но ни одна из них не устраняет необходимость в исходном значении, которое дает форму. (Но тогда этот вопрос не просил об этом.) –