Les deux param <key>
et params
sont des lentilles:
param :: Text -> Lens' Options [Text]
params :: Lens' Options [(Text, Text)]
Sans trop dans les détails, vous pouvez penser à une lentille de focalisation quelque chose, par exemple param "foo"
se concentre sur certains [Text]
dans Options
qui appartiennent au paramètre foo
(*). Vous pouvez ensuite modifier/interroger/manipuler ces valeurs avec la fonction correcte (voir le package lens).
Vous avez déjà utilisé (.~)
pour remplacer les valeurs actuelles, et vous pouvez l'utiliser à nouveau avec params
:
default & params .~ [("key1", "value1"), ("key2", "value2"), ("key3", "value3")]
Vous pouvez penser à (.~)
dans ce contexte que
(.~) :: Lens' a b -> b -> a -> a
-- concrete:
(.~) :: Lens' Options [(Text, Text)] -> [(Text, Text)] -> Options -> Options
(*) Ce n'est pas 100% vrai, puisque les lentilles vous permettent de faire toutes sortes de choses, mais assez bien pour ce contexte.
Merci beaucoup Zeta, qui aurait pensé que ce serait si simple! L'habituel moi, en essayant de trop compliquer les choses faciles -_-! –
@SimoneTrubian De rien. Si cette réponse vous satisfait, assurez-vous de l'accepter (http://meta.stackexchange.com/a/5235/191939), sinon il restera comme "sans réponse" dans plusieurs filtres. – Zeta