foldr の実行順序

Prelude> foldl (+) 10 [1 ,2 ,3 ]
16
Prelude> foldr (+) 10 [1 ,2 ,3 ]
16
Prelude> foldl (\a b -> a + b) 10 [1 ,2 ,3 ]
16
Prelude> foldr (\a b -> a + b) 10 [1 ,2 ,3 ]
16

違いが分からないので文字列の連結をさせてみる。

Prelude>  foldl (\a b -> "["++ a ++ b ++ "]") " Start " [" 1 "," 2 "," 3 "]
"[[[ Start  1 ] 2 ] 3 ]"
Prelude>  foldr (\a b -> "["++ a ++ b ++ "]") " Start " [" 1 "," 2 "," 3 "]
"[ 1 [ 2 [ 3  Start ]]]"