На самом деле foldr (-) 0 [1..5]
равно 3
, потому что это:
(1 - (2 - (3 - (4 - (5 - 0))))
Ответ на этот вопрос в виде функции foldr
:
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
Как видим, функция (a -> b -> b)
имеет итерированный элемент в качестве первого аргумента и накопитель в качестве второго. Вот почему с foldr (++) "" ["a", "b", "c"]
имеем:
("a" ++ ("b" ++ ("c" ++ "")))