2012-04-03 4 views
2

Versuch, ein Request mit Network.HTTP.Conduit Paket zu konstruieren. Die Anweisungen sind:Wie baue ich ein Network.HTTP.Conduit.Request-Objekt?

Der Konstruktor für diesen Datentyp ist nicht verfügbar. Stattdessen sollten Sie entweder die def Methode verwenden, um eine Standardinstanz abzurufen, oder parseUrl zu einer URL zu konstruieren und dann die Datensätze unten verwenden, um Änderungen vornehmen ...

Ich habe keine Ahnung, was das meint. Wie kann ich Änderungen an einem unveränderlichen Request-Objekt vornehmen? außerdem keine der Funktionen "unter" zurück ein Request Objekt!

Dies ist so weit, wie ich bekam:

main = do 
    let req = def :: String 
    putStrLn "What now? How do I make it a POST?" 

Obwohl ich nicht sicher bin, warum ich String oben entweder verwendet.

Jede Hilfe wird geschätzt.

Antwort

5

Es ist überhaupt nicht klar aus der Dokumentation, aber die "Funktionen unten" sind tatsächlich Datensatzetiketten, so dass Sie Datensatzaktualisierungssyntax verwenden können, um die gewünschte Anfrage zu erstellen. Natürlich bedeutet "modifizieren" hier, dass eine neue Anfrage erstellt wird, die auf der Standard-Anfrage und nicht auf einer tatsächlichen destruktiven Aktualisierung basiert.

Mit anderen Worten, so etwas wie diese:

let req = def { method = methodPost, ... } 
+1

Du hast Recht, es ist nicht klar. Ich habe nur ein paar Kommentare hinzugefügt, von denen ich hoffe, dass sie die Dinge etwas verdeutlichen: https://github.com/snoyberg/http-conduit/commit/82e0e77291eafa83969abc539ea9ad63fb6a9f8a. Die Erklärung dieses Setups (was ich einen Einstellungstyp nenne) ist verfügbar unter: http://www.yesodweb.com/book/settings-types –

+0

@MichaelSnoyman Meinst du nicht 'def' statt' req' in: 'let req = req'? – drozzy

+0

Ich finde diesen Weg ein bisschen komisch; aber ich denke, wenn es funktioniert ... – drozzy