Expressões de computação estendida sem for..in..do

O que quero dizer com expressões de computação estendida é expressões de computação com palavras-chave personalizadas definidas viaCustomOperation atributo.

Ao ler sobreexpressões de computação estendida, Me deparo com um IL DSL muito legal por @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
    }

Eu me pergunto como as operações compõem sem usarfor..in..do construir. Minha intuição é que começa comx.Zero membro, mas não encontrei nenhuma referência para verificar isso.

Se o exemplo acima é muito técnico, aqui está uma DSL semelhante, onde os componentes de um slide são listados semfor..in..do:

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

Eu tenho algumas questões estreitamente relacionadas:

Como alguém define ou usa expressões de computação estendida semFor membro (ou seja, fornecer um pequeno exemplo completo)? Eu não me preocupo muito se eles não são mais mônadas, estou interessado neles no desenvolvimento de DSLs.Podemos usar expressões de computação estendidas comlet! ereturn!? Se sim, existe alguma razão para não fazê-lo? Eu faço estas perguntas porque não encontrei nenhum exemplo usandolet! ereturn!.

questionAnswers(2)

yourAnswerToTheQuestion