Учитывая следующее выражение просуммировать IEnumerable цифр:Можно ли это выразить в виде свободного стиля?
let sum l = l |> Seq.reduce(+) //version a
возможно устранить аргумент - как так?
let sum = Seq.reduce(+) //version b
Я получаю сообщение об ошибке от F # компилятор (FS0030), и я, кажется, припоминаю, чтобы я видел что-то о «преобразовании эты» будучи вовлеченным, но, к сожалению, мое знание лямбда-известково слишком ограничен, чтобы проследить, как преобразование ЭТА участвует.
Может ли аргумент быть исключен, как в версии b?
Кто-нибудь, пожалуйста, назовите меня литературой, которая объяснит преобразование эта и как она вступит в игру в этом конкретном фрагменте кода?
FS0030:
STDIN (1,5): ошибка FS0030: ограничение Значение. Значение 'sum' было , имеющее общий тип val sum: ('_a -> int), когда' _a:> seq Либо сделайте аргументы «суммой» явными, либо, если вы не намерены общий, добавьте аннотацию типа.
Что делает 'l' в версии a? Не могли бы вы напомнить нам (в вопросе), что такое 'FS0030'? –
Вы имели в виду 'let sum l = Seq.reduce (+) l' для версии a? – petebu
Ну, как вы можете видеть из ошибки (и, вероятно, знаете), F # не допускает общих значений. Непосредственный стиль поддерживается только в F #. –