在standrd F#庫中是否有選項(可能)wokflow(monad)?F#中是否有標準選項工作流程?
我發現了這個工作流的十幾個手工製作實現(1,2),但我並不想將非標準和不可信的代碼引入到我的項目中。所有可以想象的對谷歌和MSDN的查詢都讓我無法找到在哪裏找到它。
在standrd F#庫中是否有選項(可能)wokflow(monad)?F#中是否有標準選項工作流程?
我發現了這個工作流的十幾個手工製作實現(1,2),但我並不想將非標準和不可信的代碼引入到我的項目中。所有可以想象的對谷歌和MSDN的查詢都讓我無法找到在哪裏找到它。
標準F#庫中沒有Maybe monad。你可能想看看FSharpx,這是F#社區的高素質成員編寫的F#擴展,它有很多有用的monads。
對於選項沒有標準的計算生成器,但是如果你不需要懶惰之類的東西(如你所鏈接的例子中所添加的),代碼很簡單,沒有理由不相信它(特別是給出了暗示性命名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()
我發現它有一個'Zero'方法添加到這個:'member x.Zero()= None'。這允許構建器的以下用法:'let thisIsNone = opt {if 2 + 2 = 5 then return「The impossible has occurred」}' –