Расширенные выражения вычислений без for..in..do

Под расширенными выражениями вычислений я подразумеваю выражения вычислений с пользовательскими ключевыми словами, определенными с помощьюCustomOperation приписывать.

Читая орасширенные выражения вычислений, Мне попадаются очень крутые IL DSL от @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
    }

Интересно, как операции сочиняются без использования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

У меня есть несколько тесно связанных вопросов:

Как определить или использовать расширенные выражения вычислений безFor член (т.е. предоставить небольшой полный пример)? Я не сильно переживаю, если они больше не монады, я заинтересован в их разработке DSL.Можем ли мы использовать расширенные выражения вычислений сlet! а такжеreturn!? Если да, есть ли причина не делать этого? Я задаю эти вопросы, потому что я не встречал ни одного примера использованияlet! а такжеreturn!.

Ответы на вопрос(2)

Ваш ответ на вопрос