2011-10-19 46 views
23

在standrd F#庫中是否有選項(可能)wokflow(monad)?F#中是否有標準選項工作流程?

我發現了這個工作流的十幾個手工製作實現(1,2),但我並不想將非標準和不可信的代碼引入到我的項目中。所有可以想象的對谷歌和MSDN的查詢都讓我無法找到在哪裏找到它。

回答

13

標準F#庫中沒有Maybe monad。你可能想看看FSharpx,這是F#社區的高素質成員編寫的F#擴展,它有很多有用的monads。

13

對於選項沒有標準的計算生成器,但是如果你不需要懶惰之類的東西(如你所鏈接的例子中所添加的),代碼很簡單,沒有理由不相信它(特別是給出了暗示性命名Option.bind函數來自標準庫)。這是一個相當簡單的例子:

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

我發現它有一個'Zero'方法添加到這個:'member x.Zero()= None'。這允許構建器的以下用法:'let thisIsNone = opt {if 2 + 2 = 5 then return「The impossible has occurred」}' –

相關問題