Расширенные выражения вычислений без 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!