问题标签 [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.

0 投票
1 回答
255 浏览

f# - 使用零的计算表达式

使用计算表达式时,第一个定义有效,但第二个定义不适用于零。

这有什么区别:

还有这个:

第一个评估为unit -> int,第二个评估为(unit -> int)。有什么不同?

0 投票
1 回答
415 浏览

f# - 用于 Rx 的 F# 工作流构建器

这里有一个很好的 Rx F# 工作流构建器:

http://blogs.msdn.com/b/dsyme/archive/2011/05/30/nice-f-syntax-for-rx-reactive-extensions.aspx

我一直在尝试为工作流做一个 Using 实现,但我一直在碰壁。也许在这里为时已晚。

一个人将如何创造这个?

提前致谢。

0 投票
2 回答
890 浏览

f# - 延续单子中的 StackOverflow

使用以下延续单子:

我不明白为什么以下给我一个堆栈溢出:

虽然以下没有:

0 投票
1 回答
996 浏览

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描述的两个重载以及如何使用它们感到有点困惑。

0 投票
3 回答
1787 浏览

f# - 为什么 F# 计算表达式需要构建器对象(而不是类)?

F# 计算表达式具有以下语法:

builder 对象在哪里ident(此语法取自Don Syme 的 2007 年博客条目)。

在我见过的所有示例中,构建器对象都是单例实例,并且是无状态启动的。Don 给出了定义一个名为 builder 对象的示例attempt

我的问题:为什么 F# 不AttemptBuilder直接在计算表达式中使用该类?当然,这种表示法可以像实例方法调用一样容易地用于静态方法调用。

使用实例值意味着理论上可以实例化同一类的多个构建器对象,可能以某种方式参数化,甚至(天堂禁止)具有可变的内部状态。但我无法想象这将如何有用。


更新:我上面引用的语法表明构建器必须显示为单个标识符,这具有误导性,并且可能反映了该语言的早期版本。最新的F# 2.0 语言规范将语法定义为:

这清楚地表明,任何表达式(计算结果为构建器对象)都可以用作构造的第一个元素。

0 投票
3 回答
3104 浏览

asynchronous - 结合 F# 异步和可能的计算表达式

假设我想Optionasync工作流程中返回一段时间:

理想情况下,我会同时使用来自 FSharpx 的可能计算表达式作为异步来避免执行match. 我可以制作一个自定义构建器,但是有没有一种方法可以通用地组合两个计算表达式?它可能看起来像这样:

0 投票
3 回答
561 浏览

f# - 嵌套布尔测试的 F# 计算表达式?

我认为我对 F# monads(工作流)有足够的了解,我在我的代码中看到了一些地方实现它们是有意义的。

例如,我有一个具有多个嵌套 if/then 的函数,即只要数据一路通过某些“测试”,该函数就应该继续。

我熟悉“可能”单子,但在我见过的所有示例中,它都被编码为对let!绑定进行操作,而我没有这样做。我希望有人可以为我提供一个为嵌套布尔测试而不是let绑定量身定制的“可能”工作流程示例。

0 投票
1 回答
172 浏览

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

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

它对序列的定义是什么?

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

0 投票
2 回答
3916 浏览

f# - 如何在 F# 中编写查询表达式?

我一直在这里查看查询表达式http://msdn.microsoft.com/en-us/library/vstudio/hh225374.aspx

我一直想知道为什么以下是合法的

但你不能真的做这样的事情

当然 F# 允许像这样的可组合性,因此您可以重用谓词?如果我想要圣诞节标题与特定日期之前的另一个谓词相结合怎么办?我必须复制并粘贴我的整个查询?C# 与此完全不同,它有多种构建和组合谓词的方法

0 投票
2 回答
1512 浏览

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!