Erweiterte Berechnungsausdrücke ohne for..in..do

Was ich unter erweiterten Rechenausdrücken verstehe, sind Rechenausdrücke mit benutzerdefinierten Schlüsselwörtern, die über definiert wurdenCustomOperation Attribut.

Beim Lesen übererweiterte Rechenausdrücke, Ich stoße auf sehr cooles IL DSL von @kvb:

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
    }

Ich frage mich, wie sich die Operationen zusammensetzen, ohne sie zu benutzenfor..in..do konstruieren. Mein Bauchgefühl ist, dass es mit anfängtx.Zero Mitglied, aber ich habe keine Referenz gefunden, um das zu überprüfen.

Wenn das obige Beispiel zu technisch ist, ist hier ein ähnliches DSL, in dem Komponenten einer Folie ohne aufgeführt sindfor..in..do:

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

Ich habe ein paar eng verwandte Fragen:

Wie definiert oder verwendet man erweiterte Rechenausdrücke ohneFor Mitglied (d. h. ein kleines vollständiges Beispiel)? Ich mache mir keine Sorgen mehr, wenn sie keine Monaden mehr sind. Ich bin daran interessiert, DSLs zu entwickeln.Können wir erweiterte Rechenausdrücke mit verwenden?let! undreturn!? Wenn ja, gibt es einen Grund, dies nicht zu tun? Ich stelle diese Fragen, weil ich kein Beispiel mit gefunden habelet! undreturn!.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage