2015-05-04 12 views
5

Sto cercando di ottenere questo esempio da Suave.io compilazione di un semplice progetto F #: http://suave.io/campione Suave.IO non compila nella mia F # progetto

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" ] 

Purtroppo sto ottenendo un errore di compilazione sul (query r) parte:

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

ho cercato di restringere l'errore del compilatore a poche linee semplici ed ora avere questo:

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

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

E ora ottenere lo stesso errore del compilatore sulla riga di saluto q. I tipi a mio esempio di cui sopra sono:

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>) 

Quindi, i miei tipi non sono corrispondenti, ma io non sono troppo sicuro di come avrei avuto questi per abbinare.

L'esempio è appena scaduto? Qualche idea su come posso ottenere questo esempio per compilare ed eseguire?

sto correndo la build RC di Visual Studio 2015

Grazie

risposta

4

io non sono a conoscenza Suave.IO, ma guardando il loro codice sorgente, sembra davvero come un codice di esempio vecchia che non lavora più. La definizione della funzione query è la seguente:

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

nota i tre argomenti - si sta solo passare la richiesta, in modo che il valore di ritorno non è un valore (o un insieme), si tratta di una funzione con due argomenti .

D'altra parte, l'operatore ^^ viene utilizzato per recuperare un valore da una raccolta per chiave.

Passando attraverso la cronologia, sembra davvero che questo sia un modo obsoleto e in realtà interrotto per recuperare la raccolta di parametri di query. Il modo corretto ora sembra essere così:

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

Grazie. Ho il campione installato e funzionante ora con il tuo aiuto. Ho anche scoperto che mi mancava l'open per: aperto Suave.Utils.Collezioni Che ha la definizione dell'operatore ^^ –

+1

@AndyB L'ho notato anche io, ma non dovrebbe essere necessario - il modulo è definito come "AutoOpen". – Luaan

Problemi correlati