J'ai un blob JSON similaire à ce qui suit:La combinaison de prismes lors de l'extraction des champs JSON avec lentille Aeson
[
{
"version": 1
},
{
"version": "3"
},
...
]
Notez que certaines versions sont des nombres et certains sont des chaînes. Je veux obtenir une liste des versions. je peux utiliser la combinaison de lentilles suivante pour extraire les versions numériques:
v1 :: [String]
v1 = obj ^.. AL.values . AL.key fieldName . AL._Number . to show
Et ce qui suit pour extraire les chaînes
v2 :: [String]
v2 = obj ^.. AL.values . AL.key fieldName . AL._String . to T.unpack
Mais, comment puis-je obtenir une liste des versions par un seul passage sur la liste? Y at-il un combinateur de lentilles qui prend les lentilles AL._Number . to show
et AL._String . to T.unpack
et renvoie un getter combiné de sorte que si le premier échoue, essaie le second? Quelque chose comme msum
pour les lentilles?
Nice. Je soupçonnais que la réponse serait dans 'Control.Lens.Traversal', mais mes yeux ont passé ce combinateur parmi tous les autres :) – duplode
@duplode Je comprends totalement. Il y a un * lot * là-dedans. – Carl