Одна деталь, которая может быть интересной, - это то, что вы также можете избежать использования аннотаций типов. В коде sepp2k вам необходимо указать, что значение effort
имеет тип Effort
, потому что компилятор обрабатывает код слева направо (и он не будет работать при вызове effort.Amount
если не знал тип). Вы можете написать это с помощью оператора конвейерной обработки:
efforts |> Seq.fold (fun acc effort -> acc + effort.Amount) 0.0
Теперь компилятору известен тип effort
, поскольку он знает, что обрабатывает коллекцию efforts
типа IList<Effort>
. Это небольшое улучшение, но я думаю, что это довольно приятно.