1. Реализуйте самостоятельно функции foldl и foldr в соответствии со спецификацией из лекции.
  2. Реализуйте посредством функций foldl и foldr свои версии функций map, flatMap, filter, а также функции:

append :: [a] -> [a] -> [a] -- конкатенация двух списков

reverse :: [a] -> [a] -- обращение списка

last :: [a] -> a -- взятие последнего элемента списка

snoc :: [a] -> a -> [a] -- добавление элемента в конец списка