2015-05-04 5 views
5

Ich versuche, dieses Beispiel aus Suave.io für ein einfaches F # -Projekt kompilieren zu erhalten: http://suave.io/Probe Suave.IO nicht kompiliert in meinem F # -Projekt

open Suave.Http.Applicatives 
open Suave.Http.Successful 
open Suave.Web 
open Suave.Types 
open Suave.Model 

let greetings q = 
    defaultArg (q ^^ "name") "World" |> sprintf "Hello %s" 

let sample : WebPart = 
    path "/hello" >>= choose [ 
    GET >>= request(fun r -> OK <| greetings (query r)) 
    POST >>= request(fun r -> OK <| greetings (form r)) 
    NOT_FOUND "Found no handlers" ] 

leider einen Compiler-Fehler Ich erhalte auf der (Abfrage r) Teil:

error FS0001: Expecting a type supporting the operator '^^' but given a function type. You may be missing an argument to a function. 

ich habe versucht, den Compiler-Fehler auf ein paar einfache Linien zu verengen und jetzt diese haben:

let greetings q = 
    defaultArg (q ^^ "name") "World" |> sprintf "Hello %s" 

let q (rqst : string) = query rqst 
let t = greetings q 

Und jetzt erhalten Sie den gleichen Compiler-Fehler auf der Begrüßung q Zeile. Die Typen in meinem Beispiel oben sind:

query: 
    string -> (string -> Choice<'T,string>) -> HttpRequest -> Choice<'T,string> 

greetings: 
(string -> (string -> Choice<obj,string>) -> HttpRequest -> Choice<obj, string>) -> string 

q: 
    string -> ((string -> Choice<'a, string>) -> HttpRequest -> Choice<'a, string>) 

So ist meine Art nicht passend, aber ich bin mir nicht sicher, wie ich diese bis entsprechen bekommen.

Ist das Beispiel gerade veraltet? Irgendwelche Ideen, wie ich dieses Beispiel zum Kompilieren und Ausführen bekommen kann?

ich die RC-Build von Visual Studio 2015

Dank

Antwort

4

Ich bin nicht vertraut mit Suave.IO, aber einen Blick auf ihre Quellcode ausgeführt wird, sieht es in der Tat wie ein alter Beispielcode, funktioniert nicht mehr. Die Definition der query Funktion ist wie folgt:

let query queryKey f (req : HttpRequest) = 
    req.queryParam queryKey 
    |> Choice.from_option (sprintf "Missing query string key '%s'" queryKey) 
    |> Choice.bind f 

Beachten Sie die drei Argumente - Sie nur die Anfrage vorbei, so ist der Rückgabewert keinen Wert (oder eine Sammlung), es ist eine Funktion mit zwei Argumenten .

Auf der anderen Seite wird der Operator ^^ verwendet, um einen Wert aus einer Sammlung per Schlüssel abzurufen.

Durch die Geschichte gehen, scheint es in der Tat, dass dies eine veraltete und tatsächlich kaputte Möglichkeit zum Abrufen der Sammlung von Abfrage-Parameter ist. Der richtige Weg scheint jetzt so zu sein:

GET >>= request(fun r -> OK <| greetings r.query) 
POST >>= request(fun r -> OK <| greetings r.form) 
+0

Danke. Ich habe die Probe jetzt mit Ihrer Hilfe gestartet. Ich fand auch, dass ich das offene für fehlte: offen Suave.Utils.Collections Das hat die Definition der ^^ -Operator –

+1

@AndyB Ich bemerkte das tatsächlich auch, aber es sollte nicht benötigt werden - das Modul ist definiert als 'AutoOpen'. – Luaan

Verwandte Themen