F#中是否有标准选项工作流程?

Che*_*tEx 26 monads workflow f# option maybe

在standrd F#库中是否有一个选项(也许)wokflow(monad)?

我发现手工制作实现的打(1,2)这个工作流程的,但我真的不希望引入非标准的,而不是非常信任的代码到我的项目.谷歌和msdn的所有可想象的查询都不知道在哪里可以找到它.

kvb*_*kvb 19

有用于选择没有标准计算的建设者,但如果你不需要像懒惰的东西(如例子中添加你的链接)的代码非常简单,有没有理由不相信它(特别是考虑到暗示性地命名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()
Run Code Online (Sandbox Code Playgroud)

  • 我觉得向它添加一个`Zero`方法很有用:`member x.Zero()= None`.这允许以下使用构建器:`let thisIsNone = opt {if 2 + 2 = 5然后返回"不可能发生的事情"}} (3认同)

pad*_*pad 17

标准的F#库中没有Maybe monad.你可能想看看FSharpx,这是一个由F#社区的高素质成员编写的F#扩展,它有很多有用的monad.