2016-02-29 2 views
2

param Dans l'excellent wreq bibliothèque Haskell, il est facile d'ajouter un ou plusieurs paramètres à une requête URL:haskell wreq liste

opts = defaults & param "key" .~ ["value"]

cependant ce que j'ai du mal à faire est d'ajouter une liste des paramètres à la fois:

params = [("key1", "value1"), ("key2", "value2"), ("key3", "value3")]

Je sais qu'il ya fonction params mais je ne pouvais pas trouver exemple sur la façon de l'utiliser.

Répondre

3

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.

+0

Merci beaucoup Zeta, qui aurait pensé que ce serait si simple! L'habituel moi, en essayant de trop compliquer les choses faciles -_-! –

+0

@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