Почему для выражений вычислений F # требуется объект-строитель (а не класс)?

Выражения вычисления F # имеют синтаксис:

ident { cexpr }

кудаident является объектом-строителем (этот синтаксис взят изДон Саймзапись блога 2007 года).

Во всех примерах ямы видели, что объекты-компоновщики являются экземплярами-одиночками и не могут загружаться. Дон приводит пример определения объекта конструктора, который называется:attempt

let attempt = new AttemptBuilder()

Мой вопрос: Почему нетт F # просто используйтеAttemptBuilder Класс непосредственно в выражениях вычислений? Конечно, нотация может быть обезврежена к вызовам статических методов так же легко, как вызовы метода экземпляра.

Использование значения экземпляра означает, что теоретически можно создать несколько объектов-строителей одного и того же класса, предположительно параметризованным каким-либо образом, или даже (не дай бог) с изменяемым внутренним состоянием. Но я могу'не представляю, как это было бы полезно.

Обновить: Синтаксис, который я цитировал выше, предполагает, что сборщик должен отображаться в виде единого идентификатора, который вводит в заблуждение и, вероятно, отражает более раннюю версию языка. Самый последнийСпецификация языка F # 2.0 определяет синтаксис как:

expr { comp-or-range-expr }

что дает понять, что любое выражение (которое оценивается как объект компоновщика) может использоваться в качестве первого элемента конструкции.

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

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