定义F#计算表达式时,零成员的用途是什么?

定义F#计算表达式时,零成员的用途是什么?,f#,computation-expression,F#,Computation Expression,我正在努力学习F#计算表达式。一般来说,零成员的目的是什么 它对序列的定义是什么 异步工作流的定义是什么?使用Zero成员,例如,在if表达式中省略else分支时: comp { if b then return 1 return 2 } 。。。将被翻译成如下内容: comp.Combine ( if b then comp.Return(1) else comp.Zero(), comp.Return(2) ) 如何为标准计算类型定义它 对于异步工作流,它被定义

我正在努力学习F#计算表达式。一般来说,零成员的目的是什么

它对序列的定义是什么


异步工作流的定义是什么?

使用
Zero
成员,例如,在
if
表达式中省略
else
分支时:

comp { if b then return 1
       return 2 }
。。。将被翻译成如下内容:

comp.Combine
  ( if b then comp.Return(1) else comp.Zero(),
    comp.Return(2) )
如何为标准计算类型定义它

  • 对于异步工作流,它被定义为立即返回单位值的异步工作流-本质上等同于写入:
    async{return()}

  • 对于序列(使用
    yield
    而不是
    return
    ),
    Zero
    成员返回一个不返回任何内容的序列,对应于标准
    Seq.empty


如果你想了解更多的理论背景,那么你可以。从更理论的角度来说,它说,
Zero
要么是
return()
(当计算是单子时),要么是一个幺半群的单位(当计算是幺半群时),这是Haskeller称之为
mzero
的东西,例如,使用了
Zero
成员,在
if
表达式中省略
else
分支时:

comp { if b then return 1
       return 2 }
。。。将被翻译成如下内容:

comp.Combine
  ( if b then comp.Return(1) else comp.Zero(),
    comp.Return(2) )
如何为标准计算类型定义它

  • 对于异步工作流,它被定义为立即返回单位值的异步工作流-本质上等同于写入:
    async{return()}

  • 对于序列(使用
    yield
    而不是
    return
    ),
    Zero
    成员返回一个不返回任何内容的序列,对应于标准
    Seq.empty

如果你想了解更多的理论背景,那么你可以。从更理论的角度来说,它说,
Zero
要么是
return()
(当计算是单子时),要么是幺半群的单位(当计算是幺半群时),这是Haskellers称之为
mzero