Если вы определяете функцию типа f x y = bla
, это то же самое, что и f x = \y -> bla
, что совпадает с f = \x -> (\y -> bla)
. Другими словами, f
- это функция, которая принимает один аргумент, x
, и возвращает другую функцию, которая принимает один аргумент, y
, а затем возвращает фактический результат. Это известно как карри.
Аналогично, когда вы делаете f x y
, оно совпадает с (f x) y
. То есть Вы вызываете функцию f
с аргументом x
. Это возвращает другую функцию, которую вы применяете к аргументу y
.
Другими словами, когда вы делаете addList xs = foldl1 (+) xs
, вы сначала вызываете foldl1 (+)
, который затем возвращает другую функцию, которую вы применяете к xs
. Так как функция, возвращаемая foldl1 (+)
, фактически совпадает с addList
, вы можете просто сократить ее до addList = foldl1 (+)
.