定义F#计算表达式时,Zero成员的目的是什么?

时间:2012-12-09 00:52:24

标签: f# computation-expression

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

它对序列的定义是什么?

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

1 个答案:

答案 0 :(得分:6)

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

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值。

如果您想了解更多理论背景,那么您可以check out this paper。在更理论的术语中,它表示Zero要么是return ()(当计算是monad时),要么它将是monoid的单位(当计算是幺半群时)这是Haskellers称之为mzero的东西。