我正在尝试学习F#计算表达式。 一般来说,零成员的目的是什么?
它对序列的定义是什么?
它对异步工作流的定义是什么?
,当您省略if
表达式中的else
分支时,将使用Zero
成员:
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 ()
的(当计算是单元时),要么将是幺半群的单位(当计算是幺半群时),这是哈斯克勒斯称之为mzero
的东西。