Por que as expressões de computação F # exigem um objeto de construtor (em vez de uma classe)?

Expressões de computação F # têm a sintaxe:

ident { cexpr }

Ondeident é o objeto construtor (essa sintaxe é retirada deEntrada de blog de 2007 de Don Syme).

Em todos os exemplos que vi, os objetos de construtor são instâncias singleton e stateless para inicializar. Don dá o exemplo de definir um objeto construtor chamadoattempt:

let attempt = new AttemptBuilder()

Minha pergunta: Por que o F # não usa apenas oAttemptBuilder classe diretamente em expressões de computação? Certamente, a notação poderia ser dessacralizada para chamadas de método estático tão facilmente quanto as chamadas de método de instância.

Usar um valor de instância significa que, em teoria, é possível instanciar vários objetos de construtor da mesma classe, presumivelmente parametrizados de alguma forma, ou até mesmo (que o céu proiba) com estado interno mutável. Mas não consigo imaginar como isso seria útil.

Atualizar: A sintaxe que citei acima sugere que o construtor deve aparecer como um único identificador, o que é enganoso e provavelmente reflete uma versão anterior da linguagem. O mais recenteEspecificação de linguagem do F # 2.0 define a sintaxe como:

expr { comp-or-range-expr }

o que deixa claro que qualquer expressão (que avalia um objeto construtor) pode ser usada como o primeiro elemento da construção.

questionAnswers(3)

yourAnswerToTheQuestion