10得票2回答
如何在maybe计算构建器中实现延迟?

这是我目前的进展: type Maybe<'a> = option<'a> let succeed x = Some(x) let fail = None let bind rest p = match p with | None -&g...

21得票3回答
结合 F# 异步和 Maybe 计算表达式

假设我想在 async 工作流中返回一个 Option:let run = async { let! x = doAsyncThing let! y = doNextAsyncThing x match y with |...

24得票2回答
不使用for..in..do的扩展计算表达式

我所说的扩展计算表达式是指通过CustomOperation属性定义自定义关键字的计算表达式。在阅读有关扩展计算表达式的内容时,我发现@kvb编写了非常酷的IL DSL:let il = ILBuilder() // will return 42 when called // val for...

7得票1回答
递归计算表达式

在之前的问题中,我被告知如何重写我的计算表达式,以便使用尾递归。我重写了代码,但仍然遇到了StackOverflowException。为了定位问题,我编写了一些小代码,使用了状态单子(取自这篇博客文章): type State<'a, 's> = State of ('s -&...

17得票3回答
为什么F#计算表达式需要一个构建器对象(而不是一个类)?

F#计算表达式的语法如下:ident { cexpr } 这里的ident是生成器对象(这种语法来自Don Syme 2007年的博客文章)。 在我看过的所有示例中,生成器对象都是单例实例,并且本身是无状态的。Don提供了一个定义名为attempt的生成器对象的示例:let attempt ...

8得票1回答
ReasonML是否有类似于F#计算表达式的等价物?

在F#中,我们有计算表达式,可以在各种计算上下文(异步、可选等)中减少样板和嵌套代码。 ReasonML是否有类似的功能? 如果有,语法是什么?

13得票3回答
延续单子在学术之外是否有实际应用?

(后来的访客:这个问题有两个回答都给出了很好的见解,如果你感兴趣,应该都读一下,我只能接受一个作为SO的限制) 在我发现的所有关于 continuation monad 的在线讨论中,要么是提到它如何与某些微不足道的示例一起使用,要么就是解释它是一个基本构建块,就像这篇文章中所描述的那样:所...

13得票4回答
我该如何编写一个计算表达式生成器,可以累加值并允许使用标准语言结构?

我有一个计算表达式生成器,随着进行构建值,并具有许多自定义操作。但它不允许标准的F#语言结构,我很难弄清楚如何添加此支持。为了给出一个独立的例子,这里是一个非常简单且没有太多意义的计算表达式,它构建F#列表:type Items<'a> = Items of 'a list ty...

9得票2回答
在自定义计算表达式中实现绑定

我正在尝试通过实现自己的计算表达式来更好地了解F#的计算表达式。然而,我在使用Bind方法时遇到了障碍。以下是我目前的代码: type public op<'a> = Op of ('a list -> 'a list) let inline (>>) (Op...

29得票2回答
F#: 是否有一种方法扩展Monad关键字列表?

在 F# monad 中,如果您使用 let!,编译器会将其转换为您在 monad builder 上定义的 Bind 成员。 现在我看到有查询 monads,如 在 MSDN 上显示,您可以这样说: query { for student in db.Student do ...