Rozszerzone wyrażenia obliczeniowe bez for..in..do

Rozszerzone wyrażenia obliczeniowe oznaczają wyrażenia obliczeniowe z niestandardowymi słowami kluczowymi zdefiniowanymi przezCustomOperation atrybut.

Podczas czytania orozszerzone wyrażenia obliczeniowe, Spotykam bardzo fajne IL DSL autorstwa @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
    }

Zastanawiam się, jak komponują się operacje bez użyciafor..in..do skonstruować. Moje przeczucie jest takie, że zaczyna się odx.Zero członek, ale nie znalazłem żadnego odniesienia, aby to sprawdzić.

Jeśli powyższy przykład jest zbyt techniczny, oto podobny DSL, w którym elementy slajdu są wymienione bezfor..in..do:

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

Mam kilka ściśle powiązanych pytań:

Jak zdefiniować lub użyć rozszerzonych wyrażeń obliczeniowych bezFor członek (tj. podać mały pełny przykład)? Nie martwię się zbytnio, jeśli nie są już monadami, interesuje mnie rozwijanie DSL.Czy możemy użyć rozszerzonych wyrażeń obliczeniowych za pomocąlet! ireturn!? Jeśli tak, czy jest jakiś powód, aby tego nie robić? Zadaję te pytania, ponieważ nie spotkałem się z żadnym przykładem użycialet! ireturn!.

questionAnswers(2)

yourAnswerToTheQuestion