2011-10-19 14 views
23

Czy istnieje opcja (może) wokflow (monad) w bibliotece standrd F #?Czy istnieje workflow opcji standardowej w F #?

Znalazłem kilkanaście ręcznie wykonanych implementacji (1, 2) tego przepływu pracy, ale tak naprawdę nie chcę wprowadzać niestandardowego i niezbyt zaufanego kodu do mojego projektu. I wszystkie wyimaginowane zapytania do google i msdn nie dały mi pojęcia, gdzie go znaleźć.

Odpowiedz

13

Nie ma może Monady w standardowej bibliotece F #. Możesz spojrzeć na FSharpx, rozszerzenie F # napisane przez wysoko wykwalifikowanych członków społeczności F #, która ma sporo przydatnych monad.

13

Nie ma standardowego narzędzia do tworzenia obliczeń dla opcji, ale jeśli nie potrzebujesz takich rzeczy jak lenistwo (jak w przykładach, które łączyłeś) kod jest na tyle prosty, że nie ma powodu, by mu nie ufać (szczególnie biorąc pod uwagę sugestywnie nazwane Option.bind funkcja ze standardowej biblioteki). Oto dość minimalny przykład:

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

Uważam, że warto dodać do tego metodę 'Zero':' member x.Zero() = None'. Pozwala to na następujące użycie budowniczego: 'let thisIsNone = opt {if 2 + 2 = 5 następnie return" Niemożliwe się stało "}' –

Powiązane problemy