我正在尝试学习 F# 计算表达式。一般来说,零会员的目的是什么?
它对序列的定义是什么?
它对异步工作流的定义是什么?
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
值。
如果你想了解更多的理论背景,那么你可以查看这篇论文。用更理论的术语来说,它Zero
要么是return ()
(当计算是单子时),要么是幺半群的单位(当计算是幺半群时),这就是 Haskellers 所说mzero
的。