2011-10-19 12 views
23

C'è un'opzione (forse) wokflow (Monade) nella Standrd F biblioteca #?Esiste un flusso di lavoro standard in F #?

Ho trovato una dozzina di implementazioni manuali (1, 2) di questo flusso di lavoro, ma non voglio introdurre nel mio progetto codice non standard e non molto affidabile. E tutte le query immaginabili su google e msdn non mi hanno dato alcun indizio su dove trovarlo.

risposta

13

Non c'è alcun Forse Monade nella libreria standard # F. Si consiglia di guardare FSharpx, un'estensione F # scritta da membri altamente qualificati della comunità F #, che ha un certo numero di monadi utili.

13

Non esiste un generatore di computazione standard per le opzioni, ma se non hai bisogno di cose come la pigrizia (come aggiunto negli esempi che hai collegato) il codice è abbastanza semplice che non c'è motivo per non fidarsi (in particolare dato il nome suggestivo Option.bind dalla libreria standard). Ecco un esempio abbastanza minimale:

type OptionBuilder() = 
    member x.Bind(v,f) = Option.bind f v 
    member x.Return v = Some v 
    member x.ReturnFrom o = o 
    member x.Zero() = None 

let opt = OptionBuilder() 
+2

Trovo utile aggiungere un metodo 'Zero' a questo:' membro x.Zero() = Nessuno'. Ciò consente il seguente utilizzo del builder: 'lasciare thisIsNone = opt {if 2 + 2 = 5 quindi restituire" L'impossibile è successo "}' –

Problemi correlati