相关疑难解决方法(0)

没有for..in..do的扩展计算表达式

扩展计算表达式的意思是使用CustomOperation属性定义的自定义关键字的计算表达式.

在阅读扩展计算表达式时,我遇到了@kvb非常酷的IL DSL:

let il = ILBuilder()

// will return 42 when called
// val fortyTwoFn : (unit -> int)
let fortyTwoFn = 
    il {
        ldc_i4 6
        ldc_i4_0
        ldc_i4 7
        add
        mul
        ret
    }
Run Code Online (Sandbox Code Playgroud)

我想知道如何在不使用for..in..do构造的情况下构成操作.我的直觉是它从x.Zero成员开始,但我没有找到任何参考来验证.

如果上面的例子太技术性,那么这里是类似的DSL,其中列出了幻灯片的组件而没有for..in..do:

page {
      title "Happy New Year F# community"
      item "May F# continue to shine as it did in 2012"
      code @"…"
      button (…)
} |> SlideShow.show
Run Code Online (Sandbox Code Playgroud)

我有几个密切相关的问题:

  • 如何在没有For成员的情况下定义或使用扩展计算表达式(即提供一个小的完整示例)?如果他们不再是monad我不担心,我对他们开发DSL感兴趣.
  • 我们可以使用扩展计算表达式let!和 …

dsl f# query-expressions computation-expression

24
推荐指数
2
解决办法
1458
查看次数