У меня есть JSON блоб, подобные следующие:Объединение призм при извлечении JS полей с объективом-эсоном
[
{
"version": 1
},
{
"version": "3"
},
...
]
Обратите внимание, что некоторые из версий являются номерами, а некоторые строки. Я хочу получить список версий. можно использовать следующую комбинацию линз для извлечения цифровых версий:
v1 :: [String]
v1 = obj ^.. AL.values . AL.key fieldName . AL._Number . to show
И следующее, чтобы извлечь строки
v2 :: [String]
v2 = obj ^.. AL.values . AL.key fieldName . AL._String . to T.unpack
Но, как я могу получить список версий на один проход над список? Есть ли комбинатор линз, который снимает линзы AL._Number . to show
и AL._String . to T.unpack
и возвращает комбинированный геттер, чтобы, если первый из них не удался, он пытается выполнить второй? Что-то вроде msum
для линз?
Ницца. Я подозревал, что ответ будет в «Control.Lens.Traversal», но мои глаза прошли мимо этого комбинатора среди всех остальных :) – duplode
@duplode Я полностью понимаю. Там есть * много *. – Carl