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