meufoldr :: (a -> b -> b) -> b -> [a] -> b meufoldr f base [] = base meufoldr f base (x:xs) = f x (meufoldr f base xs) meufoldl :: (b -> a -> b) -> b -> [a] -> b meufoldl f base [] = base meufoldl f base (x:xs) = meufoldl f (f base x) xs -- "implementando" identidade de listas usando foldr e foldl idr :: [a] -> [a] idr = foldr (:) [] idl :: [a] -> [a] idl = foldl (\xs x -> xs ++ [x]) [] naturais = [0,1..] naturaisr = idr naturais naturaisl = idl naturais