То, что я подразумеваю под расширенными выражениями вычислений, - это выражения вычислений с пользовательскими ключевыми словами, определяемыми атрибутом 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!
.