Какой объектив использовать для получения всех ключей в объекте Aeson.Object? - PullRequest
0 голосов
/ 17 сентября 2018

Я смотрю на https://www.stackage.org/haddock/lts-12.1/lens-aeson-1.0.2/Data-Aeson-Lens.html и пытаюсь найти объектив, который может дать мне все ключи от Object.Концептуально я ищу следующее:

allKeys :: Value -> Maybe [Text]
allKeys v = v ^? _Object . keys -- `keys` is not an actual lens!

Самое близкое, на что я могу возможно добраться, это использование members, но это нене кажется самым простым / быстрым / коротким способом достижения этого.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я бы, наверное, использовал то, что предложил @Gurkenglas, или

view (_Object . to HM.keys)
    :: (AsValue s, MonadReader s m)
    => m [Text]

Я считаю важным отметить, что lens на самом деле не светит там; по причине. Ключи объекта являются частью его «формы». lens прекрасно работает, когда вам не нужно менять форму. Таким образом, вы можете получить ключей, но больше ничего не можете сделать, т.е. вы не можете установить или изменить их.

0 голосов
/ 17 сентября 2018
toKeysList :: Value -> [Text]
toKeysList = toListOf $ asIndex members
...