Можем ли мы запросить и обновить структуру на разных уровнях с помощью линзы? - PullRequest
0 голосов
/ 26 октября 2018

Я часто использую линзу при работе с вложенными структурами (JSON из различных API), и меня беспокоит, что нетривиальные манипуляции с данными с линзой несколько сложны.

Под нетривиальным пониманием я подразумеваю выполнение обновления на другом узле, чем узел, для которого я запрашиваю.

Например, я бы:

  • Разверните, чтобы получить складной список интересных значений (например, price)
  • Примените критерии в этом списке (например, max), чтобы определить «владеющую» сущность результата (например, order)
  • Разверните еще раз для некоторого интересного значения (скажем, vip флаг клиента)
  • Наконец, обновите еще одно значение в этой структуре (скажем, добавьте новый item бесплатно до последнего заказа)

В некоторой степени надежной стратегией является использование «этапов», в которых используются простые линзы для извлечения промежуточных результатов, и применение новых линз для дальнейшего сужения или обновления результата. Но это несколько противоречит духу линзы, где я смогу обновить всю структуру.

В других случаях мне повезло найти комбинаторы, такие как maximumByOf, aside, но я чувствую, что мне не хватает словарного запаса и понимания проблемы - какого рода комбинаторов достаточно для такого рода задач?

Есть ли идиоматический способ сделать это с lens?

...