问题标签 [computation-expression]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
f# - 使用零的计算表达式
使用计算表达式时,第一个定义有效,但第二个定义不适用于零。
这有什么区别:
还有这个:
第一个评估为unit -> int
,第二个评估为(unit -> int)
。有什么不同?
f# - 用于 Rx 的 F# 工作流构建器
这里有一个很好的 Rx F# 工作流构建器:
http://blogs.msdn.com/b/dsyme/archive/2011/05/30/nice-f-syntax-for-rx-reactive-extensions.aspx
我一直在尝试为工作流做一个 Using 实现,但我一直在碰壁。也许在这里为时已晚。
一个人将如何创造这个?
提前致谢。
f# - 延续单子中的 StackOverflow
使用以下延续单子:
我不明白为什么以下给我一个堆栈溢出:
虽然以下没有:
f# - F# 计算表达式:如何使用“for”返回一个“seq”?
我正在编写一个本质上实现State monad的计算表达式,并且我正在尝试使用for
表达式。
我可以使用样板函数forLoop
甚至MBuilder.For()
,它们都返回一个M<seq<'U>, _>
可以通过进一步let!
表达处理的 nice 。但是当我尝试对for
表达式做同样的事情时,它无法编译告诉我里面的表达式for
必须 return unit
。
对于无法缩小的大代码块,我感到很抱歉。
现在,我正在尝试使用循环。以下三个调用按预期工作,增加状态的次数与myList
. 他们还返回一个美丽的string seq
,显然除了最后一个电话:
但以下内容无法编译:error FS0001: This expression was expected to have type M<'a,int> but here has type unit
所以我的问题是 -我做错了什么?
我也对这里For
描述的两个重载以及如何使用它们感到有点困惑。
f# - 为什么 F# 计算表达式需要构建器对象(而不是类)?
F# 计算表达式具有以下语法:
builder 对象在哪里ident
(此语法取自Don Syme 的 2007 年博客条目)。
在我见过的所有示例中,构建器对象都是单例实例,并且是无状态启动的。Don 给出了定义一个名为 builder 对象的示例attempt
:
我的问题:为什么 F# 不AttemptBuilder
直接在计算表达式中使用该类?当然,这种表示法可以像实例方法调用一样容易地用于静态方法调用。
使用实例值意味着理论上可以实例化同一类的多个构建器对象,可能以某种方式参数化,甚至(天堂禁止)具有可变的内部状态。但我无法想象这将如何有用。
更新:我上面引用的语法表明构建器必须显示为单个标识符,这具有误导性,并且可能反映了该语言的早期版本。最新的F# 2.0 语言规范将语法定义为:
这清楚地表明,任何表达式(计算结果为构建器对象)都可以用作构造的第一个元素。
asynchronous - 结合 F# 异步和可能的计算表达式
假设我想Option
在async
工作流程中返回一段时间:
理想情况下,我会同时使用来自 FSharpx 的可能计算表达式作为异步来避免执行match
. 我可以制作一个自定义构建器,但是有没有一种方法可以通用地组合两个计算表达式?它可能看起来像这样:
f# - 嵌套布尔测试的 F# 计算表达式?
我认为我对 F# monads(工作流)有足够的了解,我在我的代码中看到了一些地方实现它们是有意义的。
例如,我有一个具有多个嵌套 if/then 的函数,即只要数据一路通过某些“测试”,该函数就应该继续。
我熟悉“可能”单子,但在我见过的所有示例中,它都被编码为对let!
绑定进行操作,而我没有这样做。我希望有人可以为我提供一个为嵌套布尔测试而不是let
绑定量身定制的“可能”工作流程示例。
f# - 定义 F# 计算表达式时,零成员的用途是什么?
我正在尝试学习 F# 计算表达式。一般来说,零会员的目的是什么?
它对序列的定义是什么?
它对异步工作流的定义是什么?
f# - 如何在 F# 中编写查询表达式?
我一直在这里查看查询表达式http://msdn.microsoft.com/en-us/library/vstudio/hh225374.aspx
我一直想知道为什么以下是合法的
但你不能真的做这样的事情
当然 F# 允许像这样的可组合性,因此您可以重用谓词?如果我想要圣诞节标题与特定日期之前的另一个谓词相结合怎么办?我必须复制并粘贴我的整个查询?C# 与此完全不同,它有多种构建和组合谓词的方法
f# - 没有 for..in..do 的扩展计算表达式
我所说的扩展计算表达式是指具有通过CustomOperation属性定义的自定义关键字的计算表达式。
在阅读扩展计算表达式时,我遇到了@kvb 的非常酷的 IL DSL:
我想知道在不使用for..in..do
构造的情况下如何组成操作。我的直觉是它从x.Zero
成员开始,但我没有找到任何参考来验证这一点。
如果上面的例子技术性太强,这里有一个类似的 DSL,其中幻灯片的组件没有列出for..in..do
:
我有几个密切相关的问题:
- 如何定义或使用没有
For
成员的扩展计算表达式(即提供一个小的完整示例)?如果它们不再是 monad,我不会太担心,我对它们开发 DSL 很感兴趣。 - 我们可以使用
let!
和的扩展计算表达式return!
吗?如果是,有什么理由不这样做吗?我问这些问题是因为我没有遇到任何使用let!
and的例子return!
。