There is some case where I don't understand how `foldr` and `foldl` are used in function.

Here is a couple of example, I then explain why I don't understand them:

```
-- Two implementation of filter and map
map' f = foldr (\x acc -> (f x):acc) [] 
map'' f xs = foldl (\acc x -> acc ++ [(f x)]) [] xs 

filter' f xs = foldr(\x acc -> if(f x) then x:acc else acc) [] xs 
filter'' f  = foldl(\acc x -> if(f x) then acc++[x] else acc) [] 

```

Why does `map''` makes the use of `xs` but non `map'`? Shouldn't `map'` need a list for the list comprehension formula as well?

Same case for `filter'` vs `filter''`.

Here is an implementation which insert elements in a sorted sequence:

```
insert e [] = [e]
insert e (x:xs)
     | e > x = x: insert e xs
     | otherwise = e:x:xs
sortInsertion xs = foldr insert [] xs
sortInsertion'' xs = foldl (flip insert) [] xs

```

Why are the argument for `insert` flipped in `sortInsertion` (`[] xs`) (empty list and list) compare to the definition of insert(e []) (element and empty list)