Я думаю, что отсутствие вышеупомянутых типов, как упомянуто kvb, вероятно, является основной причиной.Есть способы обойти это, но это делает код немного неясным (см. этот фрагмент ).
Другая причина состоит в том, что выражения вычисления F # позволяют вам определять различные комбинации методов.Это не всегда просто Bind
и Return
.Например:
- Некоторые определяют
Yield
, YieldFrom
, Combine
, чтобы разрешить генерацию результатов - Некоторые определяют
Return
, ReturnFrom
, Bind
, чтобы определитьМонада - Некоторые определяют
Return
, ReturnFrom
, Bind
, Combine
, чтобы определить монаду, которая может возвращать несколько вещей - Некоторые также определяют
Delay
или Delay
и Run
для обработки лени
... поэтому выражения для вычислений должны быть определены как несколько различных интерфейсов.Я думаю, что текущий дизайн оставляет некоторую приятную гибкость в том, какие функции вычислений вы можете поддерживать.