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

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

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

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

23得票2回答
你如何在F#中编写查询表达式?

我一直在看这里的查询表达式 http://msdn.microsoft.com/en-us/library/vstudio/hh225374.aspx 而我一直在想为什么以下内容是合法的let testQuery = query { for number in netflix...

21得票1回答
在F#的计算表达式中定义新关键字

F# 3.0 beta包含了一个带有大量新关键字的query {}计算表达式。 如何在计算生成器中定义自己的关键字呢?

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

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

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

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

16得票2回答
F#自定义运算符在计算表达式中报告了错误的使用方式。

我正在为建模者简化计划定义创建一个计算表达式(CE)。我想定义只在CE中可用的函数。在这个例子中,编译器说自定义操作step和branch的使用是错误的,但我不明白为什么。编译器只是说它们没有被正确使用。 注意我知道我可以在CE之外定义step和branch来实现这个。这个问题明确是关于...

16得票2回答
如何将C#中的`where T : U`泛型类型参数约束翻译成F#?

F#的类型推断规则让我有些困扰。我正在编写一个简单的计算生成器,但是无法正确设置通用类型变量的约束。 以下是我想要的代码在C#中的样子: class FinallyBuilder<TZ> { readonly Action<TZ> finallyActi...

15得票4回答
在计算表达式中,如何将结果列表转换为列表结果?

我有一个>列表,我希望按照以下规则将其转换为单个>: 如果任何一个是,则结果应为 如果结果是,则它应该是列表中的第一个 如果每个结果都是,则结果应为,并且应保持列表顺序 所以我尝试实现了这个: let all xs = let folder = fun state next -...

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

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